首页 > 编程问答 >Scrapy:存储/抓取当前的start_url?

Scrapy:存储/抓取当前的start_url?

时间:2024-07-22 15:56:19浏览次数:13  
标签:python web-scraping url scrapy variable-assignment

背景(可以跳过):

我当前正在运行两个不同的 scrapy 爬虫。

第一个检索有关产品 x 的信息,第二个检索有关产品 x 的其他信息,这些信息是在第一个机器人抓取的 url 上找到的.

我的管道将每个产品的信息连接到多个文本文件中,其中每个产品的信息占用一行数据,并作为不同的文本文件分为多个类别。

每个机器人显然都保持信息完整性,因为所有信息一次解析一个链接(因此每个文本文件的信息与其他文本文件逐行对齐)。但是,我知道 scrapy 使用动态抓取机制,根据加载时间而不是 start_url 列表中的顺序来抓取网站。因此,我的第二个爬虫的信息与第一个爬虫的其他文本文件不一致。

一个简单的解决方法是抓取两者都找到的信息的“主键”(mysql fanboys)变体因此,可以通过按字母顺序对主键进行排序来帮助对齐表中的产品信息,从而手动对齐数据。

然而,我当前的项目在查找主键方面使我陷入了困境。第二个爬虫抓取具有有限唯一信息的网站,因此我将其发现链接回第一个爬虫的唯一方法是使用第一个爬虫识别的 url 并将其链接到第二个爬虫中的相同 start_url。


问题:

有没有一种方法可以将 xhtmlselector 的每次迭代中抓取的 start_url 分配给一个变量,然后可以将该变量与在该特定 url 上抓取的项目/字段数据一起推入管道(在无法在中找到它的情况下)源代码)?

这是我的代码:

    from scrapy.spider import BaseSpider
    from scrapy.selector import HtmlXPathSelector
    from Fleche_Noire.items import FlecheNoireItem
    import codecs

    class siteSpider(BaseSpider):
        name = "bbs"
        allowed_domains = ["http://www.samplewebsite.abc"]
        start_urls = [    
            'http://www.samplewebsite.abc/prod1',
            'http://www.samplewebsite.abc/prod2',
       ]



        def parse(self, response):
            hxs = HtmlXPathSelector(response)
            items = []
            item = FlecheNoireItem()
            item["brand"] = []
            item["age"] = []
            item["prodcode"] = hxs.select('//h1/text()').extract() or [' '] 
            item["description1"] = []
            item["description2"] = []
            item["product"] = []
            item["availability"] = []
            item["price"] = []
            item["URL"] = []
            item["imgurl"] = []
            items.append(item)
            return items

我希望能够将 start_url 存储为一个项目,就像页面上找到的 h1 文本一样。

谢谢!


当然可以!在 Scrapy 中,你可以通过 response 对象访问当前的 start URL。你可以像其他数据字段一样,在 parse 方法中将其添加到你的项目中。

以下是修改后的代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from Fleche_Noire.items import FlecheNoireItem
import codecs

class siteSpider(BaseSpider):
    name = "bbs"
    allowed_domains = ["http://www.samplewebsite.abc"]
    start_urls = [    
        'http://www.samplewebsite.abc/prod1',
        'http://www.samplewebsite.abc/prod2',
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        items = []
        item = FlecheNoireItem()
        item["brand"] = []
        item["age"] = []
        item["prodcode"] = hxs.select('//h1/text()').extract() or [' '] 
        item["description1"] = []
        item["description2"] = []
        item["product"] = []
        item["availability"] = []
        item["price"] = []
        # 将 start_url 存储到项目中
        item["URL"] = [response.url]
        item["imgurl"] = []
        items.append(item)
        return items

在这个修改后的代码中,我们使用 response.url 获取当前页面的 URL,并将其存储在 item["URL"] 中。

这样,你就可以在管道中访问每个项目的 start URL,并将其与其他信息一起使用。

标签:python,web-scraping,url,scrapy,variable-assignment
From: 21541614

相关文章

  • 用python制作终端向上滑动的效果
    我正在开发一个项目,需要时需要过渡效果。我正在通过CRT终端模拟器“cool-retro-term”运行这个python项目。我想让它像老式CRT终端一样,屏幕平滑地向上滑动所有字符以呈现下一行或刷新屏幕。像这样:终端滑动效果不是单独打印的字符,而是屏幕的滚动。到目......
  • centos stream9(linux): 编译安装python 3.12.4
    一,官方下载地址:https://www.python.org/downloads/点击进入具体版本的下载页面,我们选择稳定版本,地址:https://www.python.org/downloads/release/python-3124/如图:复制得到下载链接:https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tgz 二,下载:从命令行下载:......
  • 使用 beautifulsoup python 更改内部标签的文本
    我想更改使用Beautifulsoup获得的HTML中标签的内部文本。示例:<ahref="index.html"id="websiteName">Foo</a>变成:<ahref="index.html"id="websiteName">Bar</a>我已经设法通过其id获取标签:HTMLDocument.find(id......
  • Python - Adob​​e InDesign Javascript 脚本帮助从 Python 调用 JSX
    提前致谢。希望每个人都表现出色。我试图从python调用Adob​​eIndesignJSX文件,下面是示例代码:我想在Adob​​eINdesign2024或更高版本上运行它。我在PythonInDesign脚本编写上看到了一些示例:从预检中获取溢出文本框以自动调整大小作为参考,可能适用于Ado......
  • 为什么将小部件添加到滚动视图在 python kivy 中不起作用
    Python文件fromkivymd.appimportMDAppfromkivy.langimportBuilderfromkivy.uix.floatlayoutimportFloatLayoutfromkivy.core.windowimportWindowfromkivy.configimportConfigfromkivymd.uix.listimportOneLineListItem#UkuranwindowConfig.set(&......
  • Python 实现Excel和TXT文本格式之间的相互转换
    Excel是一种具有强大的数据处理和图表制作功能的电子表格文件,而TXT则是一种简单通用、易于编辑的纯文本文件。将Excel转换为TXT可以帮助我们将复杂的数据表格以文本的形式保存,方便其他程序读取和处理。而将TXT转换为Excel则可以将文本文件中的数据导入到Excel中进行进一步的分析和......
  • Python (Django) 数据操作
    “如何将Excel考勤数据转换为特定的数据库插入格式?”**我Excel中的数据如下所示:**这是数据格式I**需要将其转换为适合数据库插入的格式,如下所示:**我想要的数据将Excel考勤数据转换为特定数据库插入格式的Python......
  • 在 python 中表示矩阵等价类的好方法是什么?
    我正在尝试编写一个程序来对井字棋进行强化学习。我希望引擎认识到,如果您反射棋盘或旋转它,您会得到完全相同的游戏,因此这些棋盘应该被视为彼此相同。目前我有一本字典,代表我当前对每个棋盘的估计估值游戏中的棋盘,每次游戏结束时,该游戏期间发生的所有棋盘位置的估值都会根据它......
  • MIT自学---python---6.100A_lecture2
    MIT自学---python---6.100A_lecture2前言一、设置python编译器地址二、将运行python文件的命令简化三、终端尝试执行简单python命令四、今日学到的python命令个人总结前言  这两天去听讲座,没什么时间按照计划自学MIT,今天赶紧补上。今天主要任务是搭建vscodepython......
  • python pip 需要构建工具,而它已经安装
    我看到这个问题已经被发布了很多次,人们设法解决了这个问题,但我没有!!操作系统版本:Windows1021H1Build19043.1288Python版本:Python3.9.7(tags/v3.9.7:1016ef3,Aug302021,20:19:38)[MSCv.192964bit(AMD64)]onwin32Pip、wheel和setuptool都可以日期:......