爬取糗事百科的爬虫
本帖最后由 yjptx121 于 2020-6-3 21:42 编辑import re
import requests
import time
number = 1
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
BASE_URL = 'https://www.qiushibaike.com'
full_url = []
def get_url(url='https://www.qiushibaike.com/hot/page/{}/'): # 获取主页面
urls = []
print('获取主页面.....')
for index in range(1, 9): # 爬取1-9页的段子
urls.append(url.format(index))
print('主页面获取完成.....')
return urls
def get_full_text(url): # 传入主页面,然后获取主页面的子页面集合
print("获取详细url.....")
text = requests.get(url, headers=HEADERS).content.decode('utf-8')
urls = re.findall(r'<div class= "content">. * ? <a href="(.*?)" .*?>', text, re.DOTALL) # 获取所有符合条件的url
for index in range(len(urls)):
full_url.append(BASE_URL + urls) # 组合后添加至列表中
print('详细页面获取完成.....')
return full_url
def parse_url(url):
global number
print('正在解析第{}个网页...'.format(number))
response = requests.get(url, headers=HEADERS)
text = response.text
infos = re.findall(r'<div class="content">(.*?)</div>', text, re.DOTALL) # 获取段子内容
contents = []
for info in infos: # 遍历
if 350 > len(info) > 50: # 如果长度小于50或大于350,则判定为是图片或小说,忽略,反之则写入
contents.append(re.sub('<. * ?>' , '', info).strip()) # 去掉空格并替换掉所有的标签
else:
print('此页面不符合要求!')
print('准备写入.....')
with open('糗事百科内容爬取.txt', 'a', encoding='utf-8') as fp: # 写入创建好的文件
for content in contents:
fp.write('{}我是华丽的分割线,这是第{}条{}\n'.format("-"*50, number, "-"*50))
fp.write('{}\n\n'.format(content))
number += 1
print('写入完成......')
time.sleep(2)
if __name__ == '__main__':
url_index = get_url() # 获取需要爬取的主页面列表集合
for each_url in url_index: # 遍历,获取每一个主页面
detail_urls = get_full_text(each_url) # 获取每一个主页面下的详情页面集合
for detail_url in detail_urls: # 遍历,获取每一个段子对应的详情页面
parse_url(detail_url) # 解析页面
print('所有数据收集完毕!')
有做修改,勿怪!
页:
[1]