dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:119回复:0

python requests bs4 爬虫 示例

楼主#
更多 发布于:2018-10-23 10:57
功能
这个 demo 用于获得百度贴吧 某个帖子的内的图片文件。
完整代码: https://github.com/eastNan/spider

规则
1. 帖子地址: url = "http://tieba.baidu.com/p/2476521385?pn=1"
2. 帖子分页: 共 53 页
3. 图片规则: 带有 '<img class="BDE_Image" src="(.*?)"' 的字符串,例如:
<img class="BDE_Image" src="http://imgsrc.baidu.com/forum/w%3D580/sign=d24c6137d53f8794d3ff4826e21a0ead/dbfbe6cd7b899e514fbab89b43a7d933c8950d0e.jpg" 省略....>

重点
1. 基于 requests 库,封装的 spider() 函数。
功能,用于模拟浏览器,下载相应的文件 如 html 数据,图片文件等。
核心部分,是 requests 库,如: requests.get(item, headers=headers, timeout=5)  此方法发送一个 HTTP 请求,并获取到相应的资源。
参数,依次为 url地址、HTTP头部数据、连接超时时间。
返回值,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当访问 response.text 之时,Requests 会使用其推测的文本编码。对于非文本请求,以字节(类型)的方式访问请求响应体。

2. 基于 BeautifulSoup 库,封装的 parse_html() 函数。
功能,用于匹配字符串内的 图片地址(URL),并返回图片地址列表。
核心部分,是 BeautifulSoup 库(BS4),soup = BeautifulSoup(item, "lxml") ,soup 是 BeautifulSoup 对象,item 参数可以 urlllib 或者 requests请求返回的内容
soup.select(".BDE_Image") 此方法返回 通过查找CSS 中的 class名称为 BDE_Image 的资源
img.attrs['src'] attrs 属性是 Tag 对象所包含的属性值,它是一个字典类型,对应示例中实际的图片url地址 。

3. 其它
核心功能完成后,就可以将图片列表中的资源依次下载到本地,当然还有以下逻辑:
子文件夹、
重复下载、
爬虫拦截,添加HTTP头部数据(User-Agent/Referer),慢速下载(sleep)等。

小结
Requests 用于替代 urllib  库。
BeautifulSoup 用于替代 re正则表达式。

参考
详解 Requests 库的用法
内容提取神器 BeautifulSoup 的用法

#
游客

返回顶部