c 抓取网页数据(yyyymmdd爬虫默认模板代码:提取内容的css一行的方法)
优采云 发布时间: 2022-03-04 12:15c 抓取网页数据(yyyymmdd爬虫默认模板代码:提取内容的css一行的方法)
xx=开始时间,yyyymmdd
yy=结束时间,yyyymmdd
爬虫默认模板代码:
def on_start(self):
base_url='https://coinmarketcap.com/zh/currencies/bitcoin/historical-data/?start=#START#&end=#END#'
year_list=['2015','2016','2017','2018']
month_list=range(1,13)
for year in year_list:
for month in month_list:
start_date=year+str(month).rjust(2,'0')+'01'
end_date=year+str(month).rjust(2,'0')+'31'
self.crawl(base_url.replace('#START#',start_date).replace('#END#',end_date), callback=self.detail_page)
爬取时间为 2015 年 1 月至 2018 年 12 月。
需要注意的是,每个月都是按照31天来处理的。如果您尝试该网页,则可以正常返回而不会报告错误。
第二步,解析页面内容
构造好url地址后,就是解析页面内容了。
修改爬虫模板代码:
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('title').text(),
"text_right":response.doc('tr.text-right').text()
}
添加了一个字段 text_right,它是网页表格的主体。提取文本后,应将数据分为行和行,然后将每一行映射到特定字段并保存到文本csv或数据库中。如有必要,您可以自己实现。
上面稍微麻烦的就是定位需要提取内容的css的表达式。这本来就是比较价格的一件很恶心(费时、容易出错)的事情,上学的时候也很讨厌。不过pyspider做了一个非常强大的封装过程,可以将网页上的选区可视化,自动生成css选区的表达式,直接使用即可。
这也是我第一次用这个,不妨演示一下
一般只需点击1、2、4即可,不需要复制,只需将光标移动到输入选择器位置再点击4即可。
第三步,保存结果
通过覆盖 on_result 方法保存结果,
例如:
def on_result(self,result):
if not result or not result['original_id']:
return
sql = SQL()
sql.insert('t_dream_xm_project',**result)
这里的每一个结果都是上面构建的地图表单数据。在本文中,它是一个map,其key是url、title和text_right。
这里的text_right是一个收录所有行和列的文本字符串,需要进一步解析。
解析工作有时可以放在第二步。第二步, text_right 可以直接构造为列表并返回。个人比较喜欢爬取和解析的分离操作。爬取只负责加载数据,用于后续分析。负责其他模块。
还有一个更好的思路,直接获取对方网站拉取数据的接口,直接向接口发送查询数据获取结构化数据,然后直接解析存储。这种方式基本上不需要爬虫去处理 CSS 选择器之类的。
其他参考技术
1、使用代理
验证代理有效性:
参考:
导入请求
尝试:
requests.get('', proxies={"http":":8123"})
除了:
打印'连接失败'
别的:
打印'成功'
后续可以使用专业的代理工具:squid
2.伪装浏览器头部
fake-useragent 库:伪造的浏览器标头
参考:
分类:
技术要点:
相关文章: