Scrapy 脚本,如何查找特定关键字和 return 或打印 url
Scrapy script , how to find specific keyword and return or print url
好的,所以我必须完全编辑它。我已经让脚本部分工作了,我可以毫无问题地启动它,这是脚本。粘贴 link 在这里:http://pastebin.com/SKa5Wh1h 你可以看到我在 cmd 行中得到了什么。我确定正在搜索的关键字在那些 link 中,因为我也尝试了其他词,但它没有下载它们。
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
的使用,如果你有 exact 文本,你可以使用 '//a[text() == "100.00"]'
.
- 你对找到的元素有什么看法?
在 Scrapy 中,通常会创建一个 Item
class 来保存您已废弃的数据,逻辑结构由您定义的 Field
组成。
所以首先,你创建一个 Item
subclass,带有 url
Field
,在你的蜘蛛中,return
或 yield
Item
的新实例,字段 url
设置为您在页面中找到的值。
把所有这些放在一起,
你必须创建一个Item
,如图here:
import scrapy
class Page(scrapy.Item):
url = scrapy.Field()
然后,在您的蜘蛛中从 response
对象中提取所有有意义的数据。看看例子here,感受一下。但总的来说,你的代码会像,
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)
好的,所以我必须完全编辑它。我已经让脚本部分工作了,我可以毫无问题地启动它,这是脚本。粘贴 link 在这里:http://pastebin.com/SKa5Wh1h 你可以看到我在 cmd 行中得到了什么。我确定正在搜索的关键字在那些 link 中,因为我也尝试了其他词,但它没有下载它们。
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
的使用,如果你有 exact 文本,你可以使用 '//a[text() == "100.00"]'
.
- 你对找到的元素有什么看法?
在 Scrapy 中,通常会创建一个 Item
class 来保存您已废弃的数据,逻辑结构由您定义的 Field
组成。
所以首先,你创建一个 Item
subclass,带有 url
Field
,在你的蜘蛛中,return
或 yield
Item
的新实例,字段 url
设置为您在页面中找到的值。
把所有这些放在一起,
你必须创建一个Item
,如图here:
import scrapy
class Page(scrapy.Item):
url = scrapy.Field()
然后,在您的蜘蛛中从 response
对象中提取所有有意义的数据。看看例子here,感受一下。但总的来说,你的代码会像,
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)