实战爬虫抓取糗事百科段子
- 抓段子首页,部分比较长的段子抓不全
- 抓段子所需要的正则比较简单
- 难点在如何写的规范,让人一眼能够看出来
- 注意在正则表达式规则前边加r,防止转义
- 另外还需注意输出内容中多余字符的处理
- 多页抓取注意设置延时,避免页面打开速度对抓取结果的影响
- 数据保存采取追加的方式
import requests
import re
import time
def parse_url(page_url, f):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
html = requests.get(page_url, headers=headers)
text = html.text
jokes = re.findall(r'''.+?<div.+?untagged.+?<a.+?<div.+?<span>(.+?)</span> # 抓取段子
''', text, re.VERBOSE | re.DOTALL)
for joke in jokes:
joke = re.sub(r'<br>|<br/>|\n', '', joke)
print(joke, '\n')
f.write('{}\n'.format(joke))
def main():
base_url = 'https://www.qiushibaike.com/text/page/{}/'
with open('jok.csv', 'a', encoding='utf-8') as f:
f.write('{}'.format('笑话大全\n'))
for i in range(1, 11):
page_url = base_url.format(i)
parse_url(page_url, f)
time.sleep(2)
print(i)
if __name__ == '__main__':
main()