赞
踩
微信公众号:DeepThinkerr
B站:DeepThinkerr
在微信公众号回复 “51job数据爬取” 获取Python代码源文件和数据结果
(本博客在《利用 Python 爬取了 13966 条运维招聘信息,我得出了哪些结论》启发下创作,目前只爬取了数据,没有进行数据清洗。
这URL看上去是不是吓死人,其中这里边大部分都是废话真正有用的部分很短,先上第一页和第二页的URL,对比分析。
了解URL的可以知道,第一页和第二页的URL的页面参数参数分别为1和2,在看整个URL过程中,注意出现1和2的位置。一边URL的页面参数会在后边列出关键词(例如:p=1 or page=1),但是这个URL比特殊,页面参数在前边,如下图所示。
可以看到,两个URL在红色方框里边分别对应1和2,可能是页面参数。对不对试试就知道了,将参数改为3,再输入浏览器。
这个时候就到了第三页,这个时候就找到了URL的页面参数,但是这个URL看上去太长了,尝试将html?后边去掉,在看浏览器页面。惊奇的发现两者是一样的,这样将后边的吊车尾去掉,看上去就舒服多了,最后在Python中URL为:
“ https://search.51job.com/list/000000,000000,7300,00,9,99,%2B,2,” + 页面 + “.html?”
页面分析完了,就需要分析页面的HTML代码了,首先利用Ctrl+F找到需要爬取的信息位置(例如 搜索“ 长沙海贝智能科技有限公司”)。这样就找到需要解析的页面位置,如下图。
观察两个工作的结构,可以发现每一个工作的信息都放在 “
Name | Version |
---|---|
requests | 2.24.0 |
beautifulsoup4 | 4.9.1 |
pandas | 1.0.5 |
lxml | 4.5.2 |
url_pre = 'https://search.51job.com/list/000000,000000,7300,00,9,99,%2520,2,'
url_end = '.html?'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40'
headers = {'User-Agent' : user_agent}
for i in range(1,200) :
url = url_pre + str(i) + url_end
response = requests.get(url, headers=headers)
response.encoding = 'gbk' # setting encoding
html = etree.HTML(response.text)
# crawling the information of [job_name, company_name, address, salary, date] and deep_url
job_name = html.xpath('//div[@class="dw_table"]/div[@class="el"]/p/span/a/@title')
deep_url = html.xpath('//div[@class="dw_table"]/div[@class="el"]/p/span/a/@href')
company_name = html.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t2"]/a/@title')
address = html.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t3"]/text()')
salary_mid = html.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t4"]')
salary = [i.text for i in salary_mid] # salary is None
date = html.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t5"]/text()')
# get information of deep_url Position_Info = [] Functional_Categoriess = [] KeyWords = [] Contact_Info = [] Company_Type = [] Company_People = [] Industy = [] for deep in deep_url : # get the response of deep_url deep_response = requests.get(deep, headers=headers) deep_response.encoding = 'gbk' # translate the str to Tag deep_html = etree.HTML(deep_response.text) # crawling the information of [company_type, company_people, industy, # position_info, functional_categories, keyword, contact_info] position_info = deep_html.xpath('//div[@class="tCompany_main"]//div[@class="bmsg job_msg inbox"]/p/text()') functional_categories = deep_html.xpath('//div[@class="tCompany_main"]//div[@class="bmsg job_msg inbox"]/div[@class="mt10"]/p[1]/a/text()') keywords = deep_html.xpath('//div[@class="tCompany_main"]//div[@class="bmsg job_msg inbox"]/div[@class="mt10"]/p[2]/a/text()') contact_info = deep_html.xpath('//div[@class="tCompany_main"]//div[@class="bmsg inbox"]/p/text()') company_type = deep_html.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[1]/text()') company_people = deep_html.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[2]/text()') industy = deep_html.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[3]/@title') Position_Info.append(position_info) Functional_Categoriess.append(functional_categories) KeyWords.append(keywords) Contact_Info.append(contact_info) Company_Type.append(company_type) Company_People.append(company_people) Industy.append(industy)
df = pd.DataFrame()
df["岗位名称"] = job_name
df["公司名称"] = company_name
df["工作地点"] = address
df["工资"] = salary
df["职位信息"] = Position_Info
df["职能类别"] = Functional_Categoriess
df["关键词"] = KeyWords
df["公司类型"] = Company_Type
df["公司规模"] = Company_People
df["所属行业"] = Industy
df.to_csv('数据.csv', mode='a+', index=None, header=None, encoding='gbk')
time.sleep(2)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。