Python lxml库 爬取问答问题, 并通知新问题

在问答的一个版块, 如果有人发布了新的问题, 问答不会进行通知。
为了使更多提问者的问题能得到即时、快速的回答,编写了爬取问题标题程序,
用于在新问题发布时, 回答者能得到即时的通知。

1.下载页面

使用requests库的get方法即可, 注意添加headers, 否则会爬取不到内容。
requests库可使用pip安装: pip install requests

from requests import get
from lxml.etree import HTML, tostring

headers = {
"User-Agent": """Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"""
}

url = "https://ask.csdn.net/ask"
req = get(url,headers=headers)
text=req.content.decode('utf-8')

2.解析XPath

首先创建lxml.etreeHTML()对象。
该对象的xpath()方法会返回一个列表, 包含符合这个XPath的所有标签。

tree = HTML(text)
ques = tree.xpath('//*[@id="floor-ask-content-index_493"]/div/div/div[2]/div/div/div[1]/a/h2')
for q in ques:
    print(q.text) # 打印出标题

3.自动通知新问题

程序使用2个列表, 分别是lst, lst_new 保存爬取结果,
如果上一次爬取结果和本次不一致, 则输出本次爬取结果中新增加的问题。
最终的程序如下:
(源代码: gitcode.net/qfcy_/python/-/blob/master/WEB/爬取问题.py)

from requests import get
from lxml.etree import HTML, tostring
import time

def update(print_new = True):
    global lst,lst_new
    headers = {
    "User-Agent": """Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 \
    (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"""
    }

    url = "https://ask.csdn.net/ask"
    req = get(url,headers=headers)
    text=req.content.decode('utf-8')

    tree = HTML(text)
    ques = tree.xpath('//*[@id="floor-ask-content-index_493"]/div/div/div[2]/div/div/div[1]/a/h2')
    lst_new=[]
    for q in ques:
        lst_new.append(q.text)
        if q.text not in lst and print_new:
            print("新问题: ",q.text)

    lst = lst_new.copy()

lst=[]
lst_new=[]
update(print_new = False) # 首次运行更新列表
time.sleep(5)
while True:
    update()
    time.sleep(8)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qfcy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值