看了点正则爬虫
正则语法
具体语法略
py用正则要导入
import re
函数基本都用
str.findall(正则, 字符串, 模块修饰符)
正则基本都用贪婪匹配
(.*?)
re模块修饰符基本都用
re.S 表示支持换行匹配
差不多就是这个意思
import re
a = '''
<div>指数
</div>
'''
words = re.findall('<div>(.*?)</div>', a, re.S)
for word in words:
print(word)
书上的例子
爬取http://www.doupoxs.com/doupocangqiong 斗破苍穹并保存到本地txt
import re
import time
import requests
# 请求头不说了
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}
#文件目录 自行复制正确的 或者一章内容保存一个txt a+ 表示没有创建附加读写方式打开
file = open('C:/Users/.../Desktop/doupo.txt', 'a+')
# 爬取的方法
def get_info(url, num):
#请求url
res = requests.get(url)
#请求成功的时候
if res.status_code == 200:
# 正则查找规则 f12自己找下 res.content.decode('utf-8')表示转码
contents = re.findall('<p>(.*?)</p>', res.content.decode('utf-8'), re.S)
title = re.findall('<div class="entry-tit">(.*?)</div>', res.content.decode('utf-8'), re.S)
if len(title) > 0:
print('爬取第{}章{} 成功'.format(num + 1, title[0]))
else:
print('爬取第{}章 失败'.format(num + 1))
#循环写入text 如果一章写一个text新建可以放get_info里 文件关闭也要放这边
for content in contents:
file.write(content + "\n")
print()
else:
pass
if __name__ == '__main__':
#循环一个url数组 url组成规则很明显
urls = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(str(i)) for i in range(1, 1646)]
#循环执行
for url in urls:
get_info(url, urls.index(url))
time.sleep(1)
file.close()
结果