一直看到正则就怕
import requests
import re
# 豆瓣书单排行
url = 'https://book.douban.com/chart'
# 假装自己是浏览器
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
# 向url发起请求
response = requests.get(url,headers = headers)
# 保存好正则格式,方便多次调用,re.S就是忽略换行符
pattern = re.compile('<h2.*?fleft.*?/">(.*?)</a>.*?color-red fleft">(.*?)</span>',re.S)
# 找到响应体里面所有与pattern匹配的内容,结果是存在列表里的一个个元组
result = re.findall(pattern,response.text)
print('书名\t','评分')
for item in result:
print(item[0]+'\t'+item[1])
输出:
书名 评分
罗曼诺夫皇朝 8.7
国王的两个身体 9.3
思想史 8.6
我们生活的故事 8.9
事实改变之后 8.7
原则 8.6
活下去的理由 8.3
基因传 8.9
简单统计学 8.5
高难度对话:如何与挑剔的人愉快相处 8.1
常用正则列表:
\w 匹配字母数字及下划线
\W 匹配非字母数字下划线
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9]
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
* 匹配0个或多个的表达式,贪婪的。
+ 匹配1个或多个的表达式。
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n个前面表达式。
{n,m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a|b 匹配a或b
( ) 匹配括号内的表达式,也表示一个组