python - Scrapy 刮表数据
问题描述
我是编码的初学者,现在我从 Python 和 Scrapy 开始,这是我的第一个代码。
针对以下问题,我正在抓取的表不是在具有标题/索引的列中格式化,而是在字符串中,因为每个页面都有可变数量的列和行,因此很难在 .CSV 或 JSON 中将所有内容拆分为属性会混合。
示例:https ://www.kavalier.cz/en/lab-burners-sp292.html
列:
代码
类型
压力 (Pa)
消耗量 (Nm3/h)
输出量 (W)
重量 (g)
https://www.kavalier.cz/en/desiccator-with-glass-knob-sp94.html
列:
代码
类型
d1
(mm)
d2 (mm)
h (mm)
包装 (pc)
#Open product page
def parse(self, response):
urls = response.css('a.btn.btn-default::attr(href)').extract()
for url in urls:
url = response.urljoin(url)
yield scrapy.Request(url=url, callback=self.parse_details)
#Pagination
next_page_url = response.css('a.page-link.next::attr(href)').extract_first()
if next_page_url:
next_page_url = response.urljoin(next_page_url)
yield scrapy.Request(url=next_page_url, callback=self.parse)
#Product Details
def parse_details(self, response):
yield {
'Product_Name': response.css('.content > h2::text').extract_first(),
'Category': response.css('.breadcrumb > li:nth-child(4) > a ::text').extract_first(),
'Image_Url': response.css('.main-img > a::attr(href)').extract_first(),
'Table': response.xpath('//tr/td/text()').extract(),
}`
如何调整我的代码以计算所有变量表标题并将其放入列+它们的数据中。
解决方案
我假设您正在尝试从网站上抓取表格数据,在这种情况下,可以使用以下代码。它会轻松地为您完成工作。
import requests
import pandas as pd
url = 'https://www.kavalier.cz/en/desiccator-with-glass-knob-sp94.html'
html = requests.get(url).content
df_list = pd.read_html(html)
df = df_list[-1]
print(df)
推荐阅读
- java - 如何在 AIX 中将 jar 文件作为服务运行,如果崩溃将自动重启?
- swagger - 如何在开放 api 规范中为字符串类型的属性指定空字符串值作为默认值
- java - 根据年份对值进行分组
- javascript - 平均分开按钮间距并做出响应
- ios - UIButton 在隐藏和取消隐藏后中断
- amazon-web-services - Dynamo DB:使用和不使用“--endpoint-url”创建表之间的区别
- python-3.x - 如何使用来自多个数据框的特定列来创建新的数据框?
- haskell - NodeMapM(FGLGraph 库)的无法解释的行为
- vue.js - Vue 和 vue-router 嵌套视图链接具有 JSON 格式的 router-link
- javascript - 在 JavaScript 中根据 id 顺序合并对象