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

本文介绍了如何使用Python的requests库抓取网页内容,并结合xpath进行数据解析,以获取论坛的发帖列表。通过实例代码演示了整个过程,适合Python爬虫初学者。

安装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:(6/0-11/53-10/5)从零基础开始到Python各领域的项目实战教程、开发工具与电子书籍。与你分享企业当下对于python人才需求及学好python的高效技巧,不停更新最新教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值