对糗事百科的搞笑段子的抓取

对于这些搞笑段子来说,正常的爬取手段已经不能够顺利的抓取到了,所以我们经过分析之后,对爬取的界面加了一个请求头部和浏览器伪装

接下来就使用昨天提到了lxml包进行html树状化来进行作者,好笑数,文章内容,评论数,这四种的数据提取

我们首先分析一下需要爬取的内容的树状结构

分析之后,共同点都是这个id的之前的值相同,后边的数字不一样

所以我们使用contains方法,将含有这个id = 'qiushi_tag_’全部提取取出来

扫描二维码关注公众号,回复: 6214494 查看本文章

接下来根据结构来将我们需要的数据提取出来

在上面的截图中可以找到对应节点的值

接下来直接上代码

import requests
from lxml import etree
from datamanager import DataManager

#判空
def getDataFromList(temp_list):
    if len(temp_list) > 0:
        return temp_list[0]
    else:
        return

#数据库管理对象
dm = DataManager()



#接口
base_url= 'https://www.qiushibaike.com/hot/page/%d/'

#网络接口:
for page in range(1,2,1):
    url = base_url%(page)
    print(url)
    headers = {
        'User-Agent': 'Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.26Safari/537.36Core/1.63.6824.400QQBrowser/10.3.3127.400'
    }
    response = requests.get(url,headers = headers)
    with open("qiushi.html",'w',encoding=response.encoding) as fp:
        fp.write(response.text)

    #数据提取

    tree = etree.HTML(response.text)
    #先定位到文章列表
    dz_list = tree.xpath('//div[contains(@id,"qiushi_tag_")]')
    print(dz_list)
    for dz in dz_list:

        #zuozhe
        author_list = dz.xpath('./div/a/h2/text()')
        # print(len(author_list))
        author = getDataFromList(author_list).strip()
        print(author)

        #haoxiaoshu
        funny_num_list = dz.xpath('.//i[@class="number"]/text()')
        funny_num = getDataFromList(funny_num_list).strip()
        print(funny_num)
        #
        #duanzi  content
        content_list = dz.xpath('.//div[@class="content"]/span/text()')
        content = getDataFromList(content_list).strip()
        print(content)

        #pinglun
        #
        stats_list_num = dz.xpath('.//span[@class="stats-comments"]/a/i[@class="number"]/text()')
        stats_num =getDataFromList(stats_list_num)
        print(stats_num)


        # #neirong
        # content_list_p = dz.xpath('.//div[@class="main-text"]/text()')
        # content_p = getDataFromList(content_list_p)
        # print(content_p)
        # print('--------')


        #数据存储
        data = (author,funny_num,stats_num,content)#(作者,好笑数,评论数,评论内容)
        dm.save_data(data)  #保存数据




本次好要将抓取到的数据存到数据库中   可以省略 ,在下一篇中在做说明

猜你喜欢

转载自blog.csdn.net/weixin_44303465/article/details/89838847
今日推荐