使用urllib获取页面以及解析页面

虽然现在有很多爬虫框架可以帮我们方便地爬取页面。

但框架在方便的同时会有各自的限制。并且有很时只是要简单地获取一些信息,没有必要使用框架,使用urllib就能很简单地实现目标。

from urllib import request
headers = { 'User-Agent': 'Mozilla/5.0 Chrome/64.0.3282.186 Safari/537.36', }
url = 'https://xxxxxxxxx'
req = request.Request(url, headers=headers)
response = request.urlopen(req)
data = response.read().decode('UTF-8')
print(data)

这大概是最简单的爬虫程序了。

response.read()读出来的是string,要从string中解析出想要信息很难。此时可以借助lxml。

使用pip install lxml安装lxml

from lxml import etree
from urllib import request

headers = { 'User-Agent': 'Mozilla/5.0 Chrome/64.0.3282.186 Safari/537.36', }
url = 'https://xxxxxxxxx'
req = request.Request(url, headers=headers)
response = request.urlopen(req)
data = response.read().decode('UTF-8')
html = etree.HTML(response.read().decode('utf-8'))
title = html.xpath('xxxxxxxxx')[0]
print title.text

提取xpath

(1)用chrome打开目标页面,找到要想获取的元素

(2)点击“尾页” -> 右键 -> inspect -> copy -> xpath

目标元素的xpath就存在于剪贴版中了

目前碰到的问题:

如果目标元素是table中的一个元素,复制到的xpath是这样的:

/html/body/div[2]/table[4]/tbody/tr[2]/td[2]/p/span

这个path解析不出来,要把tbody去掉,即

/html/body/div[2]/table[4]/tr[2]/td[2]/p/span

参考链接

常见python爬虫框架

如果提示CERTIFICAYE_VERIFY_FAILED参考link解决。

response的用法参考link

reponse读的页面保存到文件link

Python使用lxml解析HTML responselink

提取xpathlink