目录
前言
因为较多的自然语言处理项目所需的数据需要从网站上自行爬取,因此读者简单学习了如何利用PYTHON实现网络爬虫,本文将介绍利用Python实现网络爬虫的基本思想和实现步骤。
一.利用PY实现爬虫
python爬虫的主要思想:用python代码模拟浏览器对服务器的访问,获取返回的响应内容,通过对相应内容的处理,获取我们需要的数据。
爬虫的主要步骤: 1.发送请求,利用得到的url地址发送请求 2.获取数据,获取服务器返回的响应 3.处理数据,从返回的响应种提取我们需要的数据 4.保存数据,保存为csv表格数据
二.发送请求
首先进行发送请求所需模块的导入:
#模块导入
import requests#用来发送请求的第三方库
import parsel#用来处理返回的响应的第三方库
import csv#用来保存数据
#这里的url和data组合起来才是获取到的url,这里拆开是因为原url太长,看起来不方便
url='https://www.liepin.com/zhaopin/'
#注意data是字典类型,每个键值对之间用逗号隔开
data={
"inputFrom": " head_navigation",
"scene": 'init',
"workYearCode": "0",
"ckId": "4yg8ytv1zqucvyyhgr24470u4av6sgv9",
#headers请求头,伪装模拟,同样是字典类型
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62"
}
response=requests.get(url=url,params=data,headers=headers)
#print(response),response得到一个返回的响应对象,
#打印出200时即请求成功,500为服务器超时 404网址错误 403没有访问权限 300跳转
三.获取数据
#response.text打印响应对象的内容
print(response.text)
四.数据处理和保存
最后的数据保存时,采用字典形式传输:
#把获取到的response.text转换为selector对象
selector=parsel.Selector(response.text)
#利用css读取器,返回一个列表,返回当前页面最大数量的招聘信息块
#.job-list-item是招聘信息块的css语法,从页面的“查看”中获取
lis =selector.css('.job-list-item')
# print(lis)
f=open('手写爬虫3.csv',mode='a',encoding='utf-8-sig',newline='')
#字典写入字段名
writer=csv.DictWriter(f,fieldnames=[
"职位名",
"城市",
"经验要求",
"学历要求",
"职位标签",
])
writer.writeheader()
#遍历列表,对每个招聘信息块进行数据提取
#css中的'.'相当于python路径表示中的/',即下级目录
for li in lis:
#print(li)
#依据职位名称所在的路径进行提取,对于其它的信息也是类似过程,找到路径即可
#对于职位名称的提取使用了attr是因为在原css呈现中该路径下有多个属性,因此要强调是“title”,而不含多个属性的直接text提取即可
#print(li.css('.job-title-box div::attr(title)').get()) #提取职位名称
# .job-labels-box .labels-tag
title=li.css('.job-title-box div::attr(title)').get() #职位名称
city=li.css('.job-dq-box .ellipsis-1::text').get() #城市
#money=li.css(' .job-salary').get() #薪资
tag_list=li.css('.job-labels-box .labels-tag::text').getall()#该目录下有多个标签,使用getall返回所有数据的列表,否则只返回第一个标签的数据
#print(tag_list)
#对tag_list列表中的内容进行提取
exp=tag_list[0] #工作经验要求
edu=tag_list[1] #学历要求
#因为已经提取出0和1列内容,所以使用切片对列表进行处理,删去已经提取的内容
tag_list=','.join(tag_list[2:])
dit={
"职位名": title,
"城市": city,
"经验要求": exp,
"学历要求": edu,
"职位标签": tag_list,
}
writer.writerow(dit)
print("3")