- import requests#d 导入 requests 模块
- from multiprocessing import Pool# 进程池
- from requests.exceptions import RequestException# 用于异常处理
- import JSON
- import re# 导入正则表达式
- headers={
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ApplewebKit/537.36 (Khtml, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
- }
- def get_one_page(url):# 请求单页内容的方法
- try:
- response = requests.get(url,headers=headers)# 用 requests.get 请求 url
- if response.status_code == 200:# 判断, 如果请求到的状态码 ==200(请求成功)
- return response.text# 返回网页内容
- return None# 如果是其他状态码返回 None
- except RequestException:
- return None
- def parse_one_page(HTML):# 解析单页内容
- pattern = re.compile('.*?board-index.*?>(\d+).*?src="(.*?)".*?name">
- +'.*?>(.*?).*?star">(.*?)
- .*?releasetime">(.*?)
- '+'.*?integer">(.*?).*?fraction">(.*?).*?',re.S)# 编写正则表达式
- items = re.findall(pattern,HTML)# 应用已编好的正则表达式
- for item in items:# 遍历
- yield {
- '排名':item[0],
- '图片地址': item[1],
- '标题': item[2],
- '主演': item[3].strip()[3:],
- '上映时间': item[4].strip()[5:],
- '评分': item[5]+item[6]
- }
- def write_to_file(content):# 将爬取结果保存到 resuli.txt
- with open('result.txt','a',encoding='utf-8') as f:
- f.write(JSON.dumps(content,ensure_ascii=False)+'\n')
- f.close()
- def main(offset):
- url = 'http://maoyan.com/board/4?offset='+str(offset)
- HTML = get_one_page(url)
- for item in parse_one_page(HTML):
- print(item)
- write_to_file(item)
- if __name__=="__main__":
- pool = Pool()# 构造进程池
- pool.map(main,[i*10 for i in range(10)])# 爬取多页
来源: http://www.bubuko.com/infodetail-3395381.html