静态网站抓取

requests, xpath

Posted by 粘世强 on July 23, 2018

静态网站抓取

静态网站的抓取主要依靠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表达式的常用用法:

  1. 单斜杠(/)表示选择根节点
  2. 双斜杠(//)表示选择任意位置的节点
  3. 一个点(.)表示当前节点
  4. 两个点(..)表示当前节点的父节点
  5. @表示某个节点的属性

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)