Python爬虫代码分享02——(Xpath爬取数据)

前一篇文章分享了正则表达式爬取数据,在这里我们回顾下爬虫的具体流程以及不同方式爬取数据具体属于哪个环节。

详解Python爬虫的工作流程:


①Python爬虫程序使用http库向目标站点发起请求,即发送一个Request请求

②服务器响应请求,爬虫会得到一个Response;Python爬虫通过正则表达式(RE模块)或者第三方解析库(例如:Beautifulsoup、pyquery)去解析HTML数据,使用JSON模块解析JSON数据;
③Python爬虫将数据保存到数据库(MySQL,Mongdb、Redis等)或者文件中。

可以看出,正则表达式是去解析HTML数据,也就是将网页的数据转化成代码能理解的语言,后续再处理成我们想要的数据格式。就是个翻译的过程,就想英译中,有人用百度翻译,有人有网易有道,工具不同,行为一致。

接下来我们就来说说Xpath

Python使用XPath解析HTML

给大家个地址,可以看一下,写的蛮好

Python使用XPath解析HTML:从入门到精通_python xpath文档-CSDN博客

原文:XPath是一种用于选择XML文档中节点的语言,它可以通过路径表达式来定位节点。由于HTML文档的结构与XML文档类似,XPath也可以用于解析HTML文档。Python是一种非常流行的编程语言,它提供了许多库用于解析HTML文档。本文将介绍Python中使用XPath解析HTML文档的方法和技巧。

我的建议:你只需要知道XPath是一个 工具,以及怎么使用他,就想怎么用网易有道翻译外语一样,会用就行。

Xpath爬取豆瓣TOP250电源数据效果演示

源码也给到大家,copy,然后放到自己的工程里,新建一个.py就行.

import requests
import csv
from lxml import etree
# https://movie.douban.com/top250?start=0&filter=)
f = open("data1.csv", mode='w', encoding='utf-8', newline="")
# 写入的时候 会无故多出一行空行 那是因为open的时候 会自动增加一个\n ,在open的时候 newline="" 就可以了
csvwriter = csv.writer(f)
count = 0
# 通过循环读取10页数据
while count <= 225:
    url = f"https://movie.douban.com/top250?start={count}&filter="
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
    }  # 如果代码正常却运行不出来东西,可能是请求头缺失
    # 抓取页面源代码
    r1 = requests.get(url, headers=header)
    tree = etree.HTML(r1.text)
    result = tree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol')
    # 重置sub
    sub = 1
    # 每一页有25部电影
    while sub <= 25:
        # 提取的数据
        data_to_store = []
        for i in result:
            title = i.xpath(f"./li[{sub}]/div/div[2]/div[1]/a/span[1]")[0]
            # print(title.text)
            text = i.xpath(f"./li[{sub}]/div/div[2]/div[2]/p[1]/text()[2]")[0]
            rating = i.xpath(f"./li[{sub}]/div/div[2]/div[2]/div/span[2]")[0]
            votes = i.xpath(f"./li[{sub}]/div/div[2]/div[2]/div/span[4]")[0]
            votes = votes.text
            number = ''.join(filter(str.isdigit, votes))  #2995339人评价
            # print(year)   1987/英国 意大利 中国大陆 法国/剧情 传记 历史
            # 使用split方法分割文本
            # 首先按'/'分割,然后按空格分割国家和类型
            parts = text.split('/')
            years = parts[0].strip()  # 年份是第一部分
            countries = parts[1].strip().split()  # 国家是第二部分,用空格分割
            genres = parts[2].strip().split()  # 类型是第三部分,用空格分割
        try:  #防止第三页的情况出现
            # 将提取的数据添加到列表中
            movie_data = [title.text, float(rating.text), int(number), int(years), countries, genres]
            data_to_store.append(movie_data)
            # 写入到 data.csv 文件
            with open('data1.csv', 'a', newline='', encoding='utf-8') as file:
                writer = csv.writer(file)
                for movie_data in data_to_store:
                    writer.writerow(movie_data)
        except Exception as e:
            pass
        sub += 1
    print(f"爬取完第{count/25+1}页")
    count += 25

f.close()
r1.close()
print("over")

# 打开csv文件的方法:先保存到桌面,然后用记事本打开,再另存为,编码选择ANSI

我是Grace,一名爱好心理学的173通信工科女,在不断的认识自己的不足,发现自己的热爱。如有需要可联系我,QQ2642610289,探讨人生或寻找代码都行,哈哈哈哈,有时间一定回复。

Python 网页爬虫利用 XPath 进行京东手机详情数据爬取,是因为 XPath 是一种用于在 XML 或 HTML 文档中选择元素的语言,非常适合处理结构化的网页内容。下面是简单的步骤: 1. **安装库**:首先,你需要安装 Python爬虫库,如 `requests`(用于发送 HTTP 请求)和 `BeautifulSoup` 或 `lxml`(用于解析 HTML 结构)。 ```bash pip install requests beautifulsoup4 # 或者使用 lxml 提高性能 pip install lxml ``` 2. **发送请求**:使用 `requests.get` 发送 GET 请求到京东商品详情页面的 URL。 ```python import requests url = 'https://item.jd.com/<商品ID>.html' response = requests.get(url) ``` 3. **解析HTML**:使用 BeautifulSoup 解析返回的 HTML 内容,找到包含所需数据的部分。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') xpath_query = '//*[@id="main"]/div[@class="sku-item"]' # 使用适合的XPath表达式 data_elements = soup.select(xpath_query) # 找到所有匹配的数据节点 ``` 4. **提取数据**:遍历找到的数据元素,使用 `.text`、`.get('attr')` 等方法获取具体的属性值。例如,获取手机名称、价格等信息。 ```python for element in data_elements: title = element.find('span', {'class': 'p-name'}).text price = element.find('i', {'class': 'p-price'}).get('title') print(f"标题: {title}, 价格: {price}") ``` 5. **保存数据**:如果你想将数据持久化,可以将其写入文件、数据库或 JSON 文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值