|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[index]) # 组合后添加至列表中
- 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('所有数据收集完毕!')
复制代码
有做修改,勿怪! |
|