当前位置: 代码迷 >> 综合 >> 备忘:Python爬虫(urllib.request和BeautifulSoup)
  详细解决方案

备忘:Python爬虫(urllib.request和BeautifulSoup)

热度:0   发布时间:2023-12-08 11:39:16.0

学习urllib.request和beautifulsoup,并从dribbble和behance上爬取了一些图片,记录一下

一、urllib.request

1. url的构造

构造请求的url遇到的主要问题是如何翻页的问题,dribbble网站是下拉到底自动加载下一页,地址栏的url没有变化,如下:

但是通过检查,我们可以发现request url里关于page的字段,如下:

因此,我们构造如下的url:

for i in range(25):  # 最多25页url = 'https://dribbble.com/shots?page=' + str(i + 1) + '&per_page=24'

2. header的构造

不同网页需要的header的内容不一样,参照检查里request header来构造。例如dribbble需要Referer,即从哪一个页面跳转到这个当前页面的,一般填写网站相关页面网址就可以。

headers = {"Accept": "text/html,application/xhtml+xml,application/xml;","Referer": "https://dribbble.com/","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36"}

3. urllib.request获取页面内容

用url和header实例化一个urllib.request.Request(url, headers),然后url.request.urlopen()访问网页获取数据,使用read()函数即可读取页面内容。

def open_url(url):# 将Request类实例化并传入url为初始值,然后赋值给reqheaders = {"Accept": "text/html,application/xhtml+xml,application/xml;","Referer": "https://dribbble.com/","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36"}req = urllib.request.Request(url, headers=headers)# 访问url,并将页面的二进制数据赋值给pageres = urllib.request.urlopen(req)# 将page中的内容转换为utf-8编码html = res.read().decode('utf-8')return html

这里需要注意的是,有的页面返回的数据是“text/html; charset=utf-8”格式,直接decode('utf-8')编码即可,而有的页面返回的是“application/json; charset=utf-8”格式数据,例如behance:

此时就需要json.loads()来获取数据,得到的是列表,用操作列表的方式拿到html数据:

 html = json.loads(res.read())return html['html']

二、BeautifulSoup

BeautifulSoup将复杂的html文档转换为树形结构,每一个节点都是一个对象。

1.创建对象

soup = BeautifulSoup(open_url(url), 'html.parser')

‘html.parser’是解析器,BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装,常见解析器:

  相关解决方案