首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点一个Python网络爬虫的实战问题

西宫南内多秋草,落叶满阶红不扫。

大家好,我是Python进阶者。

一、前言

前几天在Python最强王者交流群【 】问了一个Python正则表达式处理的问题,问题如下:各位大佬午好,我在使用爬虫时遇到了一个问题,就是在爬取数据时,爬取了多页但是数据保存时只有最后一页的,请问这个问题该怎么解决啊下面分别是截图与代码文件。

这种问题其实我遇到多次,但是不知道如何解决这种问题。

二、实现过程

这里【东哥】给了个思路和代码,如下:

# encoding: UTF-8

# create time: 2024/05/30/0030 16:26:03

# ################### 导入模块 #################### 分隔的开始

import time

from urllib.parse import urljoin

import openpyxl

import requests

import parsel

from fake_useragent import UserAgent

# ################### 导入模块 #################### 分隔的结束

# TODO 列表下载

def get_page(pages: int):

"""

发送请求,获取页面数据

:param pages: 翻页参数

:return: 请求到的数据

"""

url = f"https://www.xiachufang.com/category/40071/?page={pages}"

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'

}

try:

response = requests.get(url, headers=headers)

if response.status_code == 200:

parse_page(response)

else:

return "请求失败,状态响应码:\t" + str(response.status_code)

except requests.ReadTimeout as e:

print("请求超时", e.args[0])

time.sleep(2)

def parse_page(response):

"""

解析页面数据

:param response: 响应的内容

:return: 返回一个列表,并交给存储的函数

"""

items = []

lst = []

base_url = 'https://www.xiachufang.com'

html = parsel.Selector(response.text)

foods_list = html.css('div.info p.name')

count = 0

for li in range(0, len(foods_list)):

count += 1

lst.append([

count,    # 计数器

foods_list[li].css('a::text').extract()[0][16:-14].strip(),   # 获取标题

urljoin(base_url, foods_list[li].css('a::attr(href)').extract()[0])   # 获取连接并对连接做处理

])

print(lst)

items.append(lst)

save1(items)

save_data(items, current_page)

def save1(items):

with open('data.txt', 'w', encoding='utf-8') as f:

for item in items:

for item in item:

f.write(str(item) + '\n')

def save_data(items):

"""

存储数据

:param lst: 解析数据得到的列表

:return: 无返回

"""

# wb = openpyxl.Workbook()

# sheet = wb.active

# for item in lst:

#     sheet.append(item)

# wb.save('下厨房早餐.xlsx')

wb = openpyxl.Workbook()

# 选择默认的工作表

ws = wb.active

# 给工作表添加标题行

ws.append(['ID', '菜名', '链接'])

# 遍历列表数据并添加到工作表中

for item in items:

for item in item:

ws.append(item)

# 保存工作簿为Excel文件

wb.save(f'下厨房早餐{current_page}.xlsx')

def main() -> None:

total_pages = 3

for i in range(total_pages):

current_page = i + 1

get_page(current_page)

print("当前页:\t" + str(current_page))

time.sleep(2)

if __name__ == '__main__':

main()

不过修改后的代码,还是没能解决粉丝的问题。后来【隔壁山楂】给了两个思路,顺利地解决了粉丝的问题。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OVTygvZZN5_ZxFHFA_mIIXOw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券