关于Scrapy,我在使用链接提取规则导航页面时遇到问题,我认为这与允许参数有关
Regarding Scrapy, I am having trouble navigating pages using the linkextraction rules, and I think it has something to do with the allow parameter
抱歉,我是 Scrapy 的新手,无法找到递归抓取和规则定义的资源。我只是想抓取 start-url 中的所有职位列表以及下一页 link 中的所有职位列表,直到没有更多为止。我能够按照教程成功地抓取一页。然而,实现 CrawlSpider
比页面更远是很棘手的。
代码:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from tutorial.items import TutorialItem
class MySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = ["http://losangeles.craigslist.org/search/jjj?query=West+LA"]
rules = (Rule (LxmlLinkExtractor(allow=('s=d00',),restrict_xpaths=('//p[@class="button next"]',))
, callback="parse_items", follow= True),
)
def parse_items(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select("//span[@class='pl']")
items = []
for titles in titles:
item = TutorialItem()
item ["title"] = titles.select("a/text()").extract()
item ["link"] = titles.select("a/@href").extract()
items.append(item)
return items
我认为遇到问题的 html 部分是:
<a class="button next" title="next page" href="/search/jjj?s=100&query=west%20LA&sort=date">
当您转到每个页面时,唯一改变的部分是 s=d00 部分。在允许参数中定义我的问题吗?
此外,如果有人可以推荐更多递归抓取的入门教程,那将是有益的。我累了:http://mherman.org/blog/2012/11/08/recursively-scraping-web-pages-with-scrapy/#.VRBK_ZN4r-a
谢谢大家!
匹配一个或多个数字作为s
的值:
allow=r"s=\d+"
此外,您的 restict_xpaths
设置指向具有 class="button next"
的 p
元素,而只有 a
元素具有此 class 值。换句话说,替换:
restrict_xpaths=('//p[@class="button next"]',)
与:
restrict_xpaths='//a[@class="button next"]'
请注意,它也可以设置为字符串(不需要元组)。
抱歉,我是 Scrapy 的新手,无法找到递归抓取和规则定义的资源。我只是想抓取 start-url 中的所有职位列表以及下一页 link 中的所有职位列表,直到没有更多为止。我能够按照教程成功地抓取一页。然而,实现 CrawlSpider
比页面更远是很棘手的。
代码:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from tutorial.items import TutorialItem
class MySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = ["http://losangeles.craigslist.org/search/jjj?query=West+LA"]
rules = (Rule (LxmlLinkExtractor(allow=('s=d00',),restrict_xpaths=('//p[@class="button next"]',))
, callback="parse_items", follow= True),
)
def parse_items(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select("//span[@class='pl']")
items = []
for titles in titles:
item = TutorialItem()
item ["title"] = titles.select("a/text()").extract()
item ["link"] = titles.select("a/@href").extract()
items.append(item)
return items
我认为遇到问题的 html 部分是:
<a class="button next" title="next page" href="/search/jjj?s=100&query=west%20LA&sort=date">
当您转到每个页面时,唯一改变的部分是 s=d00 部分。在允许参数中定义我的问题吗?
此外,如果有人可以推荐更多递归抓取的入门教程,那将是有益的。我累了:http://mherman.org/blog/2012/11/08/recursively-scraping-web-pages-with-scrapy/#.VRBK_ZN4r-a
谢谢大家!
匹配一个或多个数字作为s
的值:
allow=r"s=\d+"
此外,您的 restict_xpaths
设置指向具有 class="button next"
的 p
元素,而只有 a
元素具有此 class 值。换句话说,替换:
restrict_xpaths=('//p[@class="button next"]',)
与:
restrict_xpaths='//a[@class="button next"]'
请注意,它也可以设置为字符串(不需要元组)。