小小白_弟中弟 2019-08-29 20:44 采纳率: 100%
浏览 440
已结题

如何在爬虫中添加线程

在爬虫中如何添加多线程并且异步执行,需要添加线程互斥锁吗?
求添加基于下方代码的多线程爬虫,以及注意事项(知识点)
本人自学的小小白,多谢

import requests
import re
class Dytt_pa(object):
    def __init__(self):
        self.file_dict = {}
        self.pagecontent = ''
    def get_page(self,url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html'): # 定义缺省url为xxx
        """获取电影列表网页源码"""
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.62 Safari/537.36"}
        req = requests.get(url,headers=headers)
        req.encoding = 'GBK'
        self.pagecontent = req.text # 运行之后得到get_page的结果,返回新内容
    def get_film_link(self):
        """将迅雷下载地址与电影名保存到字典中"""
        file_list = re.findall(r'<a href="(.*)" class="ulink">(.*)</a>',self.pagecontent) # 得到25个(半个电影link和电影名)的list
        for film_link,film_name in file_list:
            page_heard = "https://www.dytt8.net"
            film_link = page_heard + film_link # list中的完整的电影link
            self.get_page(url=film_link) # 电影详情页源码
            xun_lei = re.search(r'<td style=".*" bgcolor=".*"><a href="(.*)">ftp',self.pagecontent).group(1) # 正则出迅雷下载地址
            self.file_dict[film_name] = xun_lei
    def start(self):
        num = int(input("请输入你要下载几页:"))
        for numa in range(1,num+1):
            print("正在下载第%d页,请稍后"%numa)
            self.get_page(url='https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html'%numa)
            self.get_film_link()
            print("已下载完第%d页."%numa)
        for a, b in self.file_dict.items():
            print("%s|%s" % (a, b))

if __name__ == '__main__':
    woyaoxiadiany = Dytt_pa()
    woyaoxiadiany.start()
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-08-29 23:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?