python 多进程 requests_python多进程requests模块爬取网页数据(未加锁)

本文介绍了一个使用Python多进程和requests模块爬取猫眼电影排行榜数据的实例,演示了如何并发抓取网页并解析数据,同时讨论了多进程环境下文件写入时可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python多进程requests模块爬取网页数据import requests, re

import json

from multiprocessing import Pool

from requests.exceptions import RequestException

def get_page_html(url):

try:

headers = {

'host':'maoyan.com',

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)

AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/63.0.3239.132 Safari/537.36'

}

response = requests.get(url=url, headers=headers)

if response.status_code == 200:

return response.text

else:

return None

except RequestException as e:

return None

def handle_html(html):

pattern = re.compile('

.*?(.*?)'

'.*?(.*?).*?>(.*?).*?"star">'

'(.*?)

.*?"releasetime">(.*?).*?"integer">(.*?)'

'.*?"fraction">(.*?).*?

', re.S)

items = re.findall(pattern, html)

for item in items:

yield {

'index': item[0],

'image': item[1],

'title': item[2].strip(),

'actor': item[3].strip()[3:],

'time': item[4].strip()[5:],

'score': item[5]+item[6],

}

def write_to_file(content):

with open('./html.txt', 'a', encoding='utf-8') as f:

f.write(json.dumps(content, ensure_ascii=False) + "\n")

def main(offset=0):

html =get_page_html("http://maoyan.com/board/4?offset=%s" % offset)

items = handle_html(html=html)

for item in items:

print(item)

write_to_file(content=item)

# print(html)

if __name__ == '__main__':

# for i in range(10):

# main(i*10)

pool = Pool()

pool.map(main, [i*10 for i in range(10)])

以上数据写入到文件时,会出现错乱。原因: 当一个进程的数据还没有写完,另一个进程的数据开始写入导致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值