Python爬虫入门(二):使用requests和xpath爬取论坛发帖列表

python学习网 2020-08-04 00:00:03

安装lxml

pip install lxml

代码

import requests
from bs4 import BeautifulSoup as bs
import time
import lxml


url = "https://bbs.hupu.com/bxj-postdate"
useragent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
header = {
    'user-agent': useragent,
    # 虎扑从第11页开始就必须登录才能查看
    # 从浏览器端登录后直接复制cookie,会过时,以后运行还得重新复制一遍。
    'cookie': 'your cookie'
}

for page in range(0,50):
    page_url = url + '-' + str(page+1)
    print(f'------------------ 第{page+1}页内容 {page_url}-------------------')
    response = requests.get(page_url, headers=header)
    last = time.time()
    selector = lxml.etree.HTML(response.text)
    ul_li = selector.xpath('//*[@id="ajaxtable"]/div[1]/ul/li')
    for li in ul_li:
        item = {}
        # 标题
        title_box = li.xpath('./div[@class="titlelink box"]')[0]
        item['link'] = hupu_domin + title_box.xpath('./a[@class="truetit"]/@href[1]')[0]
        # 测试发现有些标题会用<b>标签包裹(具体见下一个单元格),需要特殊处理
        if title_box.xpath('./a[@class="truetit"]/text()'):
            item['text'] = title_box.xpath('./a[@class="truetit"]/text()')[0]
        else:
            item['text'] = '【加重】:' + title_box.xpath('./a[@class="truetit"]/b/text()')[0]
        # 作者
        autoor_box = li.xpath('./div[@class="author box"]')[0]
        item['author'] = autoor_box.xpath('./a[@class="aulink"]/text()')[0]
        # 发帖时间
        item['date'] = autoor_box.xpath('./a[2]/text()')[0]
        print(item)
        
    now = time.time()
    print(f'耗时{now-last}')
    time.sleep(1)

结果展示

------------------ 第1页内容 https://bbs.hupu.com/bxj-postdate-1-------------------
117
{'link': 'https://bbs.hupu.com/36406828.html', 'text': '高考数学毁在了硬件上', 'author': '天魔王织田信长', 'date': '2020-07-07'}
{'link': 'https://bbs.hupu.com/36406825.html', 'text': '理性讨论,周王陶林和罗大佑,李宗盛,朴树,汪峰哪组创作能力更强', 'author': '上单国服凯', 'date': '2020-07-07'}
{'link': 'https://bbs.hupu.com/36406824.html', 'text': '数学全国二我傻了', 'author': '我只喜欢万茜', 'date': '2020-07-07'}
{'link': 'https://bbs.hupu.com/36406822.html', 'text': '晚上要去面试古茗的兼职,大伙有什么想要提醒一下的吗?', 'author': '重理工安东尼', 'date': '2020-07-07'}
...
{'link': 'https://bbs.hupu.com/36404667.html', 'text': '2020年高考十大热搜专业zt', 'author': '小_熊', 'date': '2020-07-07'}
{'link': 'https://bbs.hupu.com/36404666.html', 'text': '男生怎么看女生有纹身?', 'author': '三毛和Echo', 'date': '2020-07-07'}
耗时0.09512805938720703
...
...
...
------------------ 第50页内容 https://bbs.hupu.com/bxj-postdate-50-------------------
101
{'link': 'https://bbs.hupu.com/36390301.html', 'text': '明天高考了,jrs留下一句对高三学子的祝福吧!', 'author': '超Carry的淳希', 'date': '2020-07-06'}
{'link': 'https://bbs.hupu.com/36390297.html', 'text': 'a股日涨6%居然没人讨论?', 'author': 'mcskyward', 'date': '2020-07-06'}
{'link': 'https://bbs.hupu.com/36390296.html', 'text': '烧饼应该是郭德纲追着给饭吃', 'author': '千禧基地', 'date': '2020-07-06'}
{'link': 'https://bbs.hupu.com/36390290.html', 'text': '话说中信银行校招的底薪一般啊,中信不是银行中收入高的那一批吗', 'author': 'nene我内人', 'date': '2020-07-06'}
{'link': 'https://bbs.hupu.com/36390287.html', 'text': '高铁上居然发现两个男的在干这种事?', 'author': '超级打架王', 'date': '2020-07-06'}
...
...
...
{'link': 'https://bbs.hupu.com/36389948.html', 'text': '兄弟萌求一张97版慕容复演员的动图', 'author': '圗弼', 'date': '2020-07-06'}
{'link': 'https://bbs.hupu.com/36389943.html', 'text': '兄弟们,明天高考了今天买考试用品花了66.6什么水平', 'author': '高中毕业就退休', 'date': '2020-07-06'}
耗时0.0585782527923584

Python学习扣QUN:(60-1153-105)从零基础开始到Python各领域的项目实战教程、开发工具与电子书籍。与你分享企业当下对于python人才需求及学好python的高效技巧,不停更新最新教程!

阅读(1984) 评论(0)