静态网站抓取
静态网站的抓取主要依靠requests库和xpath来进行。其中requests用来获取网页,而xpath用来定位网页中的元素。
一:requests请求
import requests
#利用get请求去获取网页内容,得到的result为网页的源代码,这个地方的url不能用简写,必须要有http
result = request.get('http://news.qq.com')
#利用.text来显示源代码
result.text
判断是否请求成功
#若返回200表明请求成功
result.status_code
网页编码
result.encoding
'GB2312'
二:xpath使用
xpath表达式的常用用法:
- 单斜杠(/)表示选择根节点
- 双斜杠(//)表示选择任意位置的节点
- 一个点(.)表示当前节点
- 两个点(..)表示当前节点的父节点
- @表示某个节点的属性
xpath的使用方法:
from lxml import etree
# 对取回来的内容进行解析
selector = etree.HTML(result.text)
#利用xpath取回内容,注意!titles是个列表
titles = selector.xpath('//div[@id="subHot"]/h2/a/text()')
#若想看到titles中所有的内容
for title in titles:
print(title)
所以,对前面的代码进行总结,如下所示:
import requests
from lxml import etree
result = requests.get('http://news.qq.com/')
selector = etree.HTML(result.text)
titles = selector.xpath('//div[@id="subHot"]/h2/a/text()')
for title in titles:
print(title)
假如要想获取某个节点的属性的值:
detail_urls = selector.xpath('//div[@id="subHot"]/h2/a/@href')
在链接中传递参数,提前设置一个字典,将要传递的参数放入字典中。
my_params = {'wd':'大数据文摘', 'rn':'10'}
r = requests.get("http://www.baidu.com/s", params=my_params)
print (r.url)
输出结果:http://www.baidu.com/s?wd=%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%96%87%E6%91%98&rn=10
设置超时时间:
#表示再0.001秒内没有访问成功,则报错,timeout是对访问时间的容忍度。
requests.get('http://github.com',timeout = 0.001)