初始网络爬虫

目录

前言

一.利用PY实现爬虫

二.发送请求

三.获取数据

四.数据处理和保存


前言

        因为较多的自然语言处理项目所需的数据需要从网站上自行爬取,因此读者简单学习了如何利用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")
    
    

    
    

猜你喜欢

转载自blog.csdn.net/cuguanren/article/details/126275566