好吧,所以我必须完全编辑它。我已经让脚本部分工作,我可以毫无问题地启动它,这是脚本。粘贴链接在这里:http://pastebin.com/SKa5Wh1h,你可以看到我在命令行中得到的内容。我确信正在搜索的关键字在这些链接中,因为我也尝试了其他单词,但它没有下载它们。
import scrapy
import requests
from scrapy.http import Request
import scrapy
from FinalSpider.items import Page # Defined in items.py
URL = "http://url.com=%d"
starting_number = 60000
number_of_pages = 100
class FinalSpider(scrapy.Spider):
name = "FinalSpider"
allowed_domains = ['url.com']
start_urls = [URL % starting_number]
def __init__(self):
self.page_number = starting_number
def start_request(self):
# generate page IDs from 1000 down to 501
for i in range (self.page_number, number_of_pages, -1):
yield Request(url = URL % i, callback=self.parse)
def parse(self, response):
for link in response.xpath('//a[text()="Amount"]/@href').extract():
yield Page(url=link)
你问的是两件事,
您提供的 xpath,
response.xpath('//100.00()')
,是无效的 xpath 表达式。
如果您想在文本中查找带有某些子字符串的
a
标签,例如 <a href="something"> 100.00 </a>
,则正确的 xpath 将是 '//a[contains(text(), "100.00")]'
。请注意 contains
的使用,如果您有 精确 文本,则可以使用 '//a[text() == "100.00"]'
。
在 Scrapy 中,通常会创建一个
Item
类来保存您已废弃的数据,并按您定义的 Field
进行逻辑结构。
首先,您创建一个
Item
子类,其中包含 url
Field
,并在您的蜘蛛中,return
或 yield
Item
的新实例,并将字段 url
设置为您在页面中找到的值。
将所有这些放在一起,
您必须创建一个
Item
,如此处所示:
import scrapy
class Page(scrapy.Item):
url = scrapy.Field()
然后,在蜘蛛中从
response
对象中提取所有有意义的数据。请查看此处的示例来感受一下。但一般来说你的代码会是这样的,
import scrapy
from myproject.items import Page # Defined in items.py
class MySpider(scrapy.Spider):
[...]
def parse(self, response):
for link in response.xpath('//a[text()="100.00"]/@href').extract():
yield Page(url=link)
我需要基于关键字的网站完全相同的脚本拉取网址