Python网络爬虫:利用BeautifulSoup爬取‘豆瓣读书’中的‘新书速递’条目

上一节用了正则表达式进行爬虫,那个方法关键在于正则表达式(Regular Expression之后简称RE)的书写,我的猜想是会有一些要提取的内容的RE写起来会很复杂,甚至很难写出来(当然,只是我的猜想,做的爬虫并不多),所以利用BeautifulSoup(之后简称BS)就不用写那些复杂的RE了,BS更多用到了一些属性,比如典型的find()、find_all()(这让我想起re里的findall方法,区别在于前者加了个’_’),通过一些标签属性的巧妙利用,同样可以爬取我们感兴趣的内容,也很方便。然后我作为练习,配合BS利用了一个常用的lxml解析库,对于这个解析库,之前我是已经安装好的。
这里我同样爬取了‘豆瓣读书’的’新书速递’中的40本图书条目,豆瓣读书的网站截图编译环境就不再放了(参考https://blog.csdn.net/ChenXvYuan_001/article/details/82421955),然后我直接放代码*爬取结果了,主要是想总结一下在这部分学习过程中遇到的一些方法、函数。
主要程序

import requests
import re
from bs4 import BeautifulSoup
i=0//计数:图书条目数
content=requests.get('https://book.douban.com/').text
soup=BeautifulSoup(content,'lxml')
for cl in soup.find_all(attrs={'class':'more-meta'})://从所有class为more-meta中提取图书书名、作者、出版日、出版商等信息
    print(cl.find(attrs={'class':'title'}).get_text().strip(),cl.find(attrs={'class':'author'}).get_text().strip(),cl.find(attrs={'class':'year'}).get_text().strip(),cl.find(attrs={'class':'publisher'}).get_text().strip())   
    print('---------------------------------------------')//为了美观的分割线
    i+=1
print('一共',i,'本书')//输出计数结果,理应为40本书

爬取结果:
这里写图片描述
这里写图片描述
一些总结:

soup=BeautifulSoup(html,'lxml')//html为某页面的HTML,‘lxml’为解析库

1、soup.prettify():
格式化代码(主要是html)
2、标签选择:
print(soup.title)//打印html中第一个title内容 eg:<title>hello</title>
print(soup.head)//打印html中head内容 eg:<head>...</head>
以此类推可以有print(soup.head/p/h/span/div)//输出各种标签
3、获取属性:
print(soup.p[‘name’])//获取p的name属性
其他类似
4、获取内容:
soup.title/p/h/etc.string():
如输出title的内容
eg:<title>hello<title> 则上面代码对应输出 hello(这就是所谓内容,其实就是标签包含的text)
5、嵌套选择:

for ul in soup.find_all('ul'):
    print(ul.find_all('li'))

6.子孙(contents)、兄弟(next/previous_siblings)、双亲(parent)、祖先(parents):
不多说了,这个直接调用就行了:)

今天先写到这里。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值