Python网络爬虫入门指南

网络爬虫是一种自动化技术,用于从网站提取大量数据。这些数据原本以非结构化格式存在于网站上,但通过爬虫技术,可以将其抓取、访问并存储为更结构化和清洁的格式,以便于进一步分析。

如何在Python中执行网络爬虫

请确保在执行网络爬虫之前,已经获得了网站的许可。以下是使用Python进行网络爬虫的基本步骤:

import bs4 from bs4 import BeautifulSoup as bs import requests # 如果尚未安装上述库,请使用以下命令安装: pip install bs4 pip install requests

将以从Flipkart网站抓取电视数据为例。首先,需要将产品的链接存储在变量中。

link='https://www.flipkart.com/search?q=tv&as=on&as-show=on&otracker=AS_Query_TrendingAutoSuggest_8_0_na_na_na&otracker1=AS_Query_TrendingAutoSuggest_8_0_na_na_na&as-pos=8&as-type=TRENDING&suggestionId=tv&requestId=9c9fa553-b7e5-454b-a65b-bbb7a9c74a29'

接下来,将使用Requests库发送HTTP请求到上述代码中的页面URL,并将响应存储在变量page中。这将给页面的HTML内容,可以用它来抓取所需的数据。

page = requests.get(link) print(page.content)

现在已经得到了页面的HTML内容,需要将其解析并存储在soup变量中,以便将其结构化为不同的格式,这将有助于数据提取

将检查Flipkart页面,从中提取数据并阅读HTML标签。为此,可以右键单击页面并点击“检查”。点击“检查”后,将出现以下屏幕,其中包含所有HTML标签,这将帮助提取所需的确切数据。

首先,需要找出包含产品名称的HTML标签和类。在下图中,可以看到产品名称(右侧突出显示的部分)嵌套在具有类_4rR01T的div标签中(左侧突出显示)。

name=soup.find('div',class_="_4rR01T") print(name) name.text

在下图中,可以看到评分(右侧突出显示的部分)嵌套在具有类_3LWZlK的div标签中(左侧突出显示)。

rating=soup.find('div',class_="_3LWZlK") print(rating) rating.text

它嵌套在具有类fMghEO的div标签中(左侧突出显示)。

specification=soup.find('div',class_="fMghEO") print(specification) specification.text

如果想要单独获取每个规格,将运行以下代码。

for each in specification: spec=each.find_all('li',class_='rgWa7D') print(spec[0].text) print(spec[1].text) print(spec[2].text) print(spec[4].text) print(spec[5].text) print(spec[7].text)

价格嵌套在具有类_30jeq3 _1_WHN1的div标签中(左侧突出显示)。

price=soup.find('div',class_='_30jeq3 _1_WHN1') print(price) price.text

到目前为止,只是提取了一台电视的数据,但现在需要页面上所有电视的数据,因此将运行一个循环并将数据存储在定义的列表中。

products=[] # 存储产品名称的列表 prices=[] # 存储产品价格的列表 ratings=[] # 存储产品评分的列表 apps = [] # 存储支持的应用程序 os = [] # 存储操作系统 hd = [] # 存储分辨率 sound = [] # 存储声音输出

检查包含所有信息的标签,并使用它来一起提取所有功能(如下图所示)。

for data in soup.findAll('div',class_='_3pLy-c row'): names=data.find('div', attrs={'class':'_4rR01T'}) price=data.find('div', attrs={'class':'_30jeq3 _1_WHN1'}) rating=data.find('div', attrs={'class':'_3LWZlK'}) specification = data.find('div', attrs={'class':'fMghEO'}) for each in specification: col=each.find_all('li', attrs={'class':'rgWa7D'}) app =col[0].text os_ = col[1].text hd_ = col[2].text sound_ = col[3].text products.append(names.text) # 添加产品名称到列表 prices.append(price.text) # 添加价格到列表 apps.append(app)# 添加支持的应用程序规格到列表 os.append(os_) # 添加操作系统规格到列表 hd.append(hd_) # 添加分辨率规格到列表 sound.append(sound_) # 添加声音规格到列表 ratings.append(rating.text) #添加评分规格到列表 print(len(products)) print(len(ratings)) print(len(prices)) print(len(apps)) print(len(sound)) print(len(os)) print(len(hd)) import pandas as pd df=pd.DataFrame({'Product Name':products,'Supported_apps':apps,'sound_system':sound,'OS':os,"Resolution":hd,'Price':prices,'Rating':ratings}) df.head(10)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485