1.看视频学习爬虫时用到了多线程,然后自己敲代码运行无反应。复制视频源代码运行也无反应
附上源代码
from fake_useragent import UserAgent
import requests
import re
from multiprocessing import Pool
ua = UserAgent()
headers = {
'user-agent':ua.random
}
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").content
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
def getHtml(url):
# ....
retry_count = 5
proxy = get_proxy()
while retry_count > 0:
try:
html = requests.get(url,headers=headers,proxies={"http": "http://{}".format(proxy)})
# 使用代理访问
html.raise_for_status()
html.encoding = 'utf-8'
return html.text
except :
retry_count -= 1
# 出错5次, 删除代理池中代理
delete_proxy(proxy)
return None
def parse_html(html):
pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?<img.*?data-src="(.*?)".*?<p.*?"name"><a.*?href="(.*?)">(.*?)</a>'
+'.*?.*?<p class="star">(.*?)</p>.*?"releasetime">'
+'(.*?)</p>.*?"integer">(.*?)</i>.*?"fraction">(\d)</i>.*?</dd>',re.S)
items = re.findall(pattern,html)
for item in items:
yield {
'排名' :item[0],
'图片链接':"https://maoyan.com"+item[1],
"电影链接":'https://maoyan.com'+item[2],
"电影名称":item[3],
"演员":item[4].strip()[3:],
"上映时间":item[5],
"评分": item[6]+item[6]
}
def main(offset):
url = "https://maoyan.com/board/4?offset="+str(offset)
html = getHtml(url)
for item in parse_html(html):
print(item)
if __name__ == '__main__':
pool = Pool()
print(pool.map(main,[i*10 for i in range(10)]))
使用的是multiprocessing 中的Pool模块
程序运行后,一直卡在这个界面。
程序不报错不退出。使用其他方法的多线程例如 apply_async之类的也没有反应。
在任务管理器中能查看到创建的进程
求大佬解答!
已经困惑很久了。