ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

好段子网站任意页数爬取

2020-01-12 15:51:19  阅读:264  来源: 互联网

标签:content url text request 页数 段子 爬取 print page


#使用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()

 

 

标签:content,url,text,request,页数,段子,爬取,print,page
来源: https://www.cnblogs.com/Qiuzhiyu/p/12182850.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有