保姆级基础爬虫架构(xpath)

本文介绍两种常见爬虫框架的应用案例,包括单页爬虫抓取豆瓣图书榜单及多页爬虫抓取广州地铁线路信息,并详细展示了使用Xpath进行数据提取的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

热文抢先看:

一、单页爬虫框架

二、多页爬虫框架


热文抢先看:

本文将会介绍两种常用的爬虫框架,为想要学习爬虫的小伙伴提供一点方向。

主要用的方式是Xpath

这里先介绍一下,如何快捷的使用Xpath

我们可以在浏览器中使用插件

 下面附上插件Xpath的链接

链接:https://pan.baidu.com/s/1WaIn2MTqzimyxLFijqst5Q 
提取码:phvs

至于如何使用Xpath请看我的另一篇博客:

http://t.csdn.cn/C6zIu​​​​​​​

一、单页爬虫框架

实例一:该实例以使用requests库请求网页方法,爬取豆瓣最受欢迎图书榜单与图书简介,保存到CSV文件中

具体代码如下所示:

import requests
from lxml import etree
import os
import csv

url = "https://book.douban.com/chart"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.58'
}
resp2=requests.get(url=url, headers=headers,timeout=5)
resp2.encoding='utf-8'
html=resp2.text       #将url中的页面源码的文本内容存放到变量html中
#print(html)
tree=etree.HTML(html)   #使用etree方法将上一步的html作为参数 生成xpath的待解析对象
bookname = tree.xpath('//a[@class="fleft"]/text()')
message = tree.xpath('//p[@class="subject-abstract color-gray"]/text()')
#print(message)
def save_to_csv(bookname,message):
    is_exists=False
    if os.path.exists("BookMessage.csv"):
        is_exist=True
    with open("BookMessage.csv","a",encoding="utf-8",newline="")as csvfile:
        writer=csv.writer(csvfile)
        if not is_exists:
            writer.writerow(['Bookname','Message'])
        writer.writerow([bookname, message])

for i,j in zip(bookname,message):
        j = j.replace('\n', '')
        j = j.replace(' ', '')
        print(i,j)
        save_to_csv(i, j)


二、多页爬虫框架

实例二:爬取广州所有地铁线路,并把地铁线路的途径站点信息输出到控制台,并保存到CSV文件中

首先创建一个所有线路详情页的前缀pre_url,再创建一个包含所有线路详情页的url。

用xpath解析出所有页面的后缀

用for循环遍历解析出的后缀,并添加进前缀pre_url中

接下来的操作和实例一同上

import requests
from lxml import etree
import csv
pre_url = "https://dt.8684.cn"  #先将所有线路详情页的前缀存入pre——url变量
url = "https://dt.8684.cn/gz" #这个是包含所有线路详情页的url

html = requests.get(url) #获取一级网页url的源码、
html.encoding='utf-8'
html=html.text
tree = etree.HTML(html)  #生成xpath的待解析对象

subway_line_urls=tree.xpath('//ul[@class="ib-mn rl-mn ib-box"]/li/a[2]/@href')
#print(subway_line_urls)

def save_to_csv(line,stations):

    with open("SubwayMessage1.csv", "a", encoding="utf-8", newline="") as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['地铁线路', '站点信息'])
        writer.writerow([line,stations])


for i in subway_line_urls:
    subway_line_html = requests.get(pre_url + i)
    subway_line_html.encoding = 'utf-8'
    subway_line_html = subway_line_html.text
    tree = etree.HTML(subway_line_html)
    subway_stations = tree.xpath('//a[@class="cl-station"]/text()')
    subway_line_name = tree.xpath('//em[@class="lm-tt"]/text()')
    #print(subway_line_name[0],subway_stations)
    #print(subway_line_name)
    #print(subway_line_name,subway_stations)
    save_to_csv(subway_line_name, subway_stations)

print("爬取完成!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值