• 多线程爬虫爬取详情页HTML


    注意:如果想爬取详情页的信息请按须添加方法

    import requests
    import os
    import re
    import threading
    from lxml import etree

    #爬去详情页得HTML内容
    class CnBeta(object):

    def get_congtent(self,url):
    #获取网页首页HTML信息
    r = requests.get(url)
    #将获取得HTML页面进行解码
    html = r.content.decode('utf-8')
    #返回值
    return html

    def xpath_html(self,html):
    html = etree.HTML(html)
    #利用xpath进行解析HTML模板
    new_url = html.xpath("//dt/a/@href")
     
    #定义容器把获取到得所有详情页url添加到容器
    url_list = []
    #定义容器把截取后得文件名字添加到名字容器
    name_list = []
    #遍历url列表容器
    for i in new_url:
    #由于获取到得url不同 利用判断进行手动更改
    if "http:" not in i:
    h = "http:" + i + ".htm"
    url_list.append(h)
    else:
    url_list.append(i)
    #对获取到得url进行链式切片获取想要得字段 用来命名文件名字
    file_name = i.split('/')[-1].split('.')[0]
    #把获取到的文件名字添加到名字容器
    name_list.append(file_name)
    #返回两个值
    return url_list,name_list
     
    #定义方法获取详情页URL
    def load_html(self,url,name):
    #获取详情页HTML信息
    r = requests.get(url)
    #对详情页HTML信息进行解码
    html = r.content.decode("utf-8")
    #把相应得HTML信息写入指定文件夹 并把动态传过来得文件名字直接写入并加入指定文件后缀
    with open('E:/新建文件夹/'+name+".html",'w',encoding="utf-8") as f:
    f.write(html)

    if __name__ == "__main__":
    #实例化对象
    cndeta = CnBeta()
    #调用方法并传入首页URL
    html = cndeta.get_congtent('https://www.cnbeta.com/')
    #定义两个变量分别接收方法传过来的两个参数
    url,name = cndeta.xpath_html(html)
    #循环遍历url的个数 定义线程执行的个数 在这里直接执行len(url)个线程
    for i in range(len(url)):
    #定义多线程爬去 target指定方法 args指定相应的url和文件名字
    s = threading.Thread(target=cndeta.load_html,args=(url[i],name[i]))
    #守护线程
    s.setDaemon(True)
    #执行线程
    s.start()
    #阻塞主线程
    s.join()
  • 相关阅读:
    NSURLSession 网络请求
    NSData 数据
    NSStream文件流
    NSFileManager文件管理
    NSCache 缓存
    NSUserDefaults数据存储
    NSKeyedArchiver数据归档
    子线程定时器的创建
    NSEnumerator迭代器
    NSDate 时间
  • 原文地址:https://www.cnblogs.com/wjohh/p/10503605.html
Copyright © 2020-2023  润新知