首页 > Web开发 > 详细

好段子网站任意页数爬取

时间:2020-01-12 16:04:01      阅读:75      评论:0      收藏:0      [点我收藏+]
#使用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 = \n.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()

技术分享图片

 

 

技术分享图片

好段子网站任意页数爬取

原文:https://www.cnblogs.com/Qiuzhiyu/p/12182850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!