• 好段子网站任意页数爬取


    #使用Xpath方式爬取好段子
    #http://www.haoduanzi.com/category/?1-1.html 从第二页开始1-2 1-3
    
    import urllib.parse
    import urllib.request
    from lxml import etree
    import time
    import json
    
    #写个列表 parse_content方法中使用
    item_list = []
    
    #构建请求函数
    def handle_request(url,page):
        #构造请求头
        headers = {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }
        #注意 拼接url  新姿势
        url = url % page
        #print(url)
        request = urllib.request.Request(url=url,headers=headers)
        return request
    
    #定义解析服务器返回内容的函数
    def parse_content(content):
        #生成对象
        tree = etree.HTML(content)
        #注意此处有一个重点是
        # <li>标签中有不含属性的,有含属性的,要过滤不含属性的 li[not(@class)]
        #注意:
        #双斜杠//代表下面所有位置的标签
        #.//代表当前块内的标签寻找
        div_list = tree.xpath('//div[@class="left"]/ul[@class="list-box"]/li[not(@class)]')
        # print(len(div_list))
        # exit()
        #循环li列表
        for odiv in div_list:
            #获取标题
            title = odiv.xpath('.//h2[@class="s2"]/text()')
            # print(title)
            # exit()
            #内容
            text_lt = odiv.xpath('.//div[@class="content"]/a/p/text()')
            text = '
    '.join(text_lt)
            # print(text)
            # print(len(text))
            # print("*"*60)
            # exit()
            item ={
                '标题':title,
                '内容':text
            }
            #将内容写入到列表中
            item_list.append(item)
    #主函数
    def main():
        start_page = int(input("请输入想要开始爬取的页数(从第2页开始):"))
        end_page = int(input("请输入想要结束的页数:"))
        url = "http://www.haoduanzi.com/category/?1-%s.html"
        for page in range(start_page,end_page +1):
            print("开始爬取第%s页"% page)
            #构建请求
            request = handle_request(url,page)
            content = urllib.request.urlopen(request).read().decode()
            #print(content)
            parse_content(content)
            time.sleep(2)
            #写入到文件中
            #string = json.dumps(item_list,ensure_ascii=False)
            #此处输出为一个大字典
            with open("duanzi.html","w",encoding="utf8") as fp:
                fp.write(str(item_list))
            print("第%s页爬取结束"% page)
        print("爬取任务结束.....")
    
    if __name__== '__main__':
        main()

    作者:求知鱼

    -------------------------------------------

    个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    独学而无友,则孤陋而寡闻,开源、分享、白嫖!

  • 相关阅读:
    URL
    VI,CI,UI
    ubuntu优化使用
    Django入门之自定义页面
    python3 连接SQLserver
    Python3 捕捉异常
    python3 异常处理
    Django入门
    较大型站立会议(交付前两天)--张永组-2014-04-15
    站立会议-2014-04-14
  • 原文地址:https://www.cnblogs.com/Qiuzhiyu/p/12182850.html
Copyright © 2020-2023  润新知