python-requests 简单实现数据抓取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-requests 简单实现数据抓取相关的知识,希望对你有一定的参考价值。

安装包:
  requests,lxml
request包用于进行数据抓取,
lxml用来进行数据解析
对于对网页内容的处理,由于html本身并非如数据库一样为结构化的查询所见即所得,所以需要对网页的内容进行分析然后进行内容提取,lxml就是用来完成此项工作
在requests中最用的方法为get()方法,通常情况下可以将url做为参数传入进去,对于一些功能比较完善的网站如果存在反爬取数据的功能是则需要设置headers参数内容,内容为一字典类型
可以在浏览器中查看User-Agent字段的内容,设置后requests将在抓取数据时同时提交所设置的头信息以进行浏览器的访问模拟
同时在抓取数据时要注意网站所使用的字符编码,当编码不一至时需要对字符编码进行相应的转换
具体见以下代码注释
#!/usr/bin/python
# encoding: utf-8
import requests
from lxml import etree


url=‘http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml‘

def getNewUrlList():
global url
header ={‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36‘}    构造浏览器头信息
response=requests.get(url,headers=header)   获取数据
html=response.content.decode("gbk")    解码
selector=etree.HTML(html)
contents = selector.xpath(‘//div[@id="content_right"]/div[@class="content_list"]/ul/li[div]‘)    使用xpath语法解析获取数据//表示从根开始查找@后跟相应的html属性
for eachlink in contents:
url = eachlink.xpath(‘div/a/@href‘)[0] if str(eachlink.xpath(‘div/a/@href‘)[0]).__contains__("http") else "http://www.chinanews.com"+eachlink.xpath(‘div/a/@href‘)[0]
title = eachlink.xpath(‘div/a/text()‘)[0]
ptime = eachlink.xpath(‘div[@class="dd_time"]/text()‘)[0]
yield (title,url,ptime)

def getNewContent(urlList):
for title,url,ptime in urlList:
response=requests.get(url,headers={‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36‘})
html=response.content.decode("gbk")
selector=etree.HTML(html)
title=selector.xpath("//div[@id=‘cont_1_1_2‘]/h1/text()")[0]
source=selector.xpath("//div[@id=‘cont_1_1_2‘]/div[@class=‘left-time‘]/div[@class=‘left-t‘]/text()")[0]
content=selector.xpath("//div[@id=‘cont_1_1_2‘]/div[@class=‘left_zw‘]/p/text()")

i=0
resultContent=‘‘
for item in range(0,content.__len__()):
resultContent+=content[i]
i+=1
yield (title,source,resultContent)

if __name__=="__main__":
urlList= getNewUrlList()
result= getNewContent(urlList)
for title,source,content in result:
print u"标题:%s"%title
print u"来源:%s"%source
print u"正文:%s"%content



以上是关于python-requests 简单实现数据抓取的主要内容,如果未能解决你的问题,请参考以下文章

使用Chrome快速实现数据的抓取——优点

python 利用 scrapy 实现3个爬虫简单入门数据抓取

Django 不接受来自 python-requests.patch() 的数据

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

爬虫很简单么?直到我抓取了一千亿个网页后我懂!爬虫真不简单!

使用Chrome快速实现数据的抓取