re的使用(一)

198 阅读1分钟

智联招聘job的正则的提取方式

import re
mystr = '<span title="大数据分析工程师" class="jobTitle over-length \
                listsimple__content__item__box__jobname__span \
                listsimple__content__item__box__jobname__span__title">大数据分析工程师</span>'


restr = ">\W+<"
# 不带有括号的话,会匹配上所有的数据
restr1 = ">(\W+)<"
# 带有括号只会匹配上括号中的数据

# 为什么要进行预编译:加快运行速度
regex = re.compile(restr,re.IGNORECASE)

# 注意这里的写法:使用的是regex编译后的结果的findall方法
mylist = regex.findall(mystr)
print(mylist)
# 运行结果:['\xe5\xa4\xa7\xe6\x95\xb0\xe6\x8d\xae\xe5\x88\x86\xe6\x9e\x90\xe5\xb7\xa5\xe7\xa8\x8b\xe5\xb8\x88']
print(mylist[0])
# 运行结果:大数据分析工程师

使用selenium爬取拉钩信息

import re
import selenium
import selenium.webdriver
import time

# 因为智联招聘的改版,从新使用拉钩信息
def getnumberbyname(searchname):
    url = "https://sou.zhaopin.com/?jl=530&kw="+searchname+"&kt=3"
    # 注意我们在这个地方进行调用chrome的时候需要用到chromedriver_win32驱动,需要下载并配置指定的路径进行使用
    driver = selenium.webdriver.Chrome(r"C:\Users\xxxx\Desktop\chromedriver.exe")  # 调用chrome浏览器
    driver.get(url)
    pagesource = driver.page_source  # 抓取网页源代码
    restr = '">(\W+)</span>'
    # 带有括号只会匹配上括号中的数据

    # 为什么要进行预编译:加快运行速度
    regex = re.compile(restr, re.IGNORECASE)

    # 注意这里的写法:使用的是regex编译后的结果的findall方法
    mylist = regex.findall(pagesource)
    time.sleep(2)
    driver.close()
    return mylist

for name in getnumberbyname("python"):
    print(name)

对指定地点的python求职信息进行抓取

import selenium
import selenium.webdriver
import re
import time

def getnumberbyspace(space):
    url = "https://www.lagou.com/jobs/list_python%20测试/p-city_2?px=default&district=海淀区&bizArea="+space+"#filterBox"
    driver = selenium.webdriver.Chrome(r"C:\Users\xxxx\Desktop\chromedriver.exe")
    driver.get(url)
    time.sleep(5)
    pagesource = driver.page_source
    """
    在这里延申两个知识点:
        1.我们的匹配的字符串中如果有中文的话,一般匹配不上,建议前面带一个u
        2.我们的括号的匹配需要使用( 的方式,而针对分组的括号则不做任何处理
    """
    restr = u'职位 ( <span>(\d+)</span> )'
    regex = re.compile(restr,re.IGNORECASE)
    mylist = regex.findall(pagesource)

    driver.close()
    return mylist[0]


spacelist = ["马连洼","海淀黄庄","西二旗","香山","航天桥"]

for space in spacelist:
    print(space,getnumberbyspace(space))