python - scrapy 开始 url 中的迭代顺序

标签 python web-scraping scrapy

我在 csv 文件中有一个 url 列表,我将此文件加载到 pandas 数据框中,并使用列链接作为起始 url

start_urls =  df['Links']

每个链接都有这种格式

http://www.bbb.org/search/?type=name&input=%28408%29+998-0983&location=&tobid=&filter=business&radius=&country=USA%2CCAN&language=en&codeType=YPPA

此链接与电话号码 (408) 998-0983 相关,该号码在链接中显示为 %28408%29+998-0983

对于 df['Links'] 中的每个页面,我废弃一些数据,并将其保存在一个项目中,到目前为止一切顺利,我遇到的问题是 scrapy 中的顺序接受的列表与数据框不同,所以我无法合并使用 scrapy 获得的数据和我已经拥有的文件,因为行不匹配,我也想在以下情况下处理异常该页面没有数据并返回字符串,我可以在代码的哪一部分中执行此操作,这就是我现在正在做的事情:

def parse(self, response):




    producto = Product()
    producto = Product(BBB_link = response.xpath('//*[@id="container"]/div/div[1]/div[3]/table/tbody/tr[1]/td/h4[1]/a').extract()

最佳答案

您问题的第一部分已得到解答here ,这建议重写 start_requests() 以添加元数据。就您而言,我想您可以将电话号码添加为元数据,但任何指向数据框的方便链接都可以。抓取数据的顺序不会改变,但您将有足够的信息与数据库或电子表格中的原始数据相关。

class MySpider(CrawlSpider):

    def start_requests(self):
        ...
        yield Request(url1, meta={'phone_no': '(408) 998-0983'}, callback=self.parse)
        ...

def parse(self, response):
    item['phone_no'] = response.meta['phone_no']

对于未找到数据的情况,您可以测试 xpath 返回的列表。如果它是空的,那么什么也找不到。

producto = Product(BBB_link = response.xpath('//*[@id="container"]/div/div[1]/div[3]/table/tbody/tr[1]/td/h4[1]/a').extract()
if producto:
    <parse the page as normal>
    item['status'] = 'found ok'
else:
    item['status'] = 'not found'

yield item

关于python - scrapy 开始 url 中的迭代顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33664640/

相关文章:

python - 从数学函数创建图形

python - 如何使用设置差异比较 pandas DataFrame

python - Scrapy : restrict_css with bad formatted HTML

jquery - 有 jQuery 网页抓取工具吗?

Scrapy-Splash 与 Tor

python - 如何使用css选择器获取跨度数据?

python - 如何在 mongoengine 中迭代数据库中的集合?

python - 提取我的 .json.gz 文件时,会添加一些字符 - 并且该文件无法存储为 json 文件

javascript - Selenium 单击 GDPR 单击按钮

python - 用于测试的 Scrapy 限制请求