使用scrapy做数据爬取时,尤其是多页多内容爬取,不能对文件做频繁执行,一是容易被封ip,二是太频繁的操作会引起网络维护人员反感。这时,就需要单独写个文件对一些没有把握的字段进行爬取,为scrapy多文件爬取服务。
以拉勾网为例,想要在这个辅助测试的文件中获得任职的学历要求
代码为:
#coding:utf-8
import requests
import lxml.etree
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
}
data = requests.get("https://www.lagou.com/jobs/4680072.html", headers=headers).content.decode("utf-8")
res = lxml.etree.HTML(data)
degree_need = res.xpath("//*[@class=\"job_request\"]/p/span[4]/text()")
print(degree_need)
代码中.content.decode("utf-8")与.text等价,requests的content与text的区别是,content返回的是<class 'bytes'>,text返回的是<class 'str'>,content.decode("utf-8")返回的是<class 'str'>
上面的解析方式是单页测试的一种,下面这种和scrapyresponse自己的解析基本一致。以后在做单页测试时,可以采用这种方式。
#coding:utf-8
import requests
from scrapy.selector import Selector
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
}
data = requests.get("https://www.lagou.com/jobs/4680072.html", headers=headers)
selector = Selector(text=data.text)
salary = selector.css(".salary::text").extract_first()
print(salary)
网友评论