05 Python 网络爬虫 Xpath实战

要求:从搜狐新闻网站上爬取新闻列表并将每篇新闻的标题和链接保存到本地的news.txt文件中。

代码的思路如下:

  1. 设置用户代理,防止被服务器识别为爬虫并拒绝访问。
  2. 发送请求获取新闻列表页面,并用lxml库的etree模块将页面内容解析成html dom文档。
  3. 使用xpath语句选取新闻列表页面中的所有新闻链接,并对每个链接发送请求并解析其html dom文档。
  4. 使用xpath语句选取每篇新闻的标题和正文,并将标题作为文件名,将正文保存到以标题命名的文件中。

 详细实现代码:

'''
XPath模块-搜狐新闻

需求:
    1.打开搜狐新闻官网 爬取新闻列表(新闻标题、新闻链接)
    2.将新闻标题和新闻链接保存到 news.txt中
        重庆警方:一实载50人大客车发生侧翻,20人受伤其中7人伤势较重:https://new.qq.com/rain/a/20230428A01VRU00
        .....
    3.使用lxml库以及xpath语句实现功能
'''
import os

import requests
from lxml import etree

# 1.设置用户代理
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}
# 2.获取新闻列表
def getNewsList():
    # 2.1 设置新闻的url地址
    url = "http://news.sohu.com/"
    # 2.2 爬取新闻列表对象
    response = requests.get(url=url,headers=headers)
    # 2.3 设置解码格式
    response.encoding = 'utf-8'
    # 2.4 将网页进行转换
    html = etree.HTML(response.text)
    # 2.5 设置路径表达式(获取a标签且属性class='text-chain-item')
    hrefList = html.xpath("//a[@class='text-chain-item']//@href")
    # 2.6 循环遍历每个链接进行处理
    for href in hrefList:
        # https://www.sohu.com/a/671041852_121284943?edtsign=8B3BE8A49C43875BF4315DEF05C02F66A491F3A0&edtcode=7l1qGClIU%2Fep9oAfqs2zVA%3D%3D&scm=1103.plate:663:0.0.1_1.0&_f=index_cpc_1_0&spm=smpc.channel_258.block4_314_Y6ubu8_1_fd.2.1682670588234GoqvdiH_1090
        getNew("https://www.sohu.com"+href)

# 获取新闻详情页
def getNew(url):
    # 3.1 爬取新闻详情页的数据
    response = requests.get(url=url,headers=headers)
    # 3.2 设置解码格式
    response.encoding = 'utf-8'
    # 3.3 将文件转换为html dom文档
    html = etree.HTML(response.text)
    # 3.4 获取新闻标题
    title = html.xpath("//h1//text()")[0].strip()
    # 3.6 获取新闻正文(获取article节点所有的子元素为p的节点的文本数据)
    content = html.xpath("//article/p//text()")
    # 3.7 将正文变成数据
    data = "\n".join(content)
    # 3.8 保存清洗后的数据
    print(type(title))
    if "/" in title:
        title = "实探骂顾客穷长沙“索命小串”店:牛肉鸭肠里脊10元30串,蜘蛛蜈蚣海马50元"

    file = open("%s.txt"%title,'w',encoding='utf-8')
    file.write(data)
    file.close()
    # print("已经写入了:",title)

if __name__ == '__main__':
    # 创建文件夹‘搜狐新闻’
    if "搜狐新闻" not in os.listdir():
        os.mkdir("搜狐新闻")
    os.chdir("搜狐新闻")
    getNewsList()

当使用Python进行爬虫时,XPath是一种非常有用的工具,可以帮助您从HTML或XML文档中提取所需的数据。以下是一个简单的示例,演示如何使用PythonXPath进行爬虫实战: 首先,您需要安装必要的库。在Python中,您可以使用`lxml`库来解析HTML或XML文档,并使用`requests`库发送HTTP请求。您可以使用以下命令来安装它们: ```python pip install lxml pip install requests ``` 接下来,我们将使用`requests`库发送HTTP请求,并使用`lxml`库解析返回的HTML内容。以下是一个示例代码: ```python import requests from lxml import etree # 发送HTTP请求并获取页面内容 url = 'https://example.com' # 替换为您要爬取的网页地址 response = requests.get(url) content = response.content # 使用lxml解析HTML内容 html = etree.HTML(content) # 使用XPath提取所需的数据 data = html.xpath('//div[@class="example-class"]/text()') # 替换为您要提取数据的XPath表达式 # 打印提取的数据 for d in data: print(d) ``` 在上述示例中,我们首先发送HTTP请求并获取网页的内容。然后,我们使用`etree.HTML()`函数将内容转换为可解析的HTML对象。接下来,我们使用XPath表达式`'//div[@class="example-class"]/text()'`来提取具有`class`属性为`example-class`的`div`元素的文本内容。您可以根据实际情况调整XPath表达式以匹配您要提取的数据。 注意:在实际使用中,您可能还需要处理页面的反爬机制、处理异常情况和使用循环遍历多个页面等。此示例仅为演示基本的Python爬虫XPath使用方法。 希望这可以帮助到您!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值