c 抓取网页数据(yyyymmdd爬虫默认模板代码:提取内容的css一行的方法)

优采云 发布时间: 2022-03-04 12:15

  c 抓取网页数据(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 库:伪造的浏览器标头

  参考:

  分类:

  技术要点:

  相关文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线