我没有特定的代码问题我只是不确定如何使用Scrapy框架在逻辑上处理以下问题:
我想要抓取的数据结构通常是每个项目的表格行.直截了当,对吧?
最终,我想要删除每一行的标题,截止日期和详细信息. 标题和截止日期可立即在页面上找到...
但是细节本身不在表格中 - 而是指向包含细节的页面的链接(如果这里没有意义,那么这是一个表格):
|-------------------------------------------------|
| Title | Due Date |
|-------------------------------------------------|
| Job Title (Clickable Link) | 1/1/2012 |
| Other Job (Link) | 3/2/2012 |
|--------------------------------|----------------|
Run Code Online (Sandbox Code Playgroud)
即使在阅读了Scrapy文档的CrawlSpider部分之后,我恐怕仍然不知道如何使用回调和请求在逻辑上传递项目.
我有一个关于如何在scrapy中做这件事的问题.我有一只蜘蛛爬行列出物品页面.每次找到具有项目的列表页面时,都会调用parse_item()回调来提取项目数据和产生项目.到目前为止,一切都很好.
但是每个项目,除了其他数据之外,还有一个网址,其中包含有关该项目的更多详细信息.我想跟随该URL并在另一个项目字段(url_contents)中存储该项目的URL的获取内容.
而且我不确定如何组织代码来实现这一点,因为两个链接(列表链接和一个特定的项链接)遵循不同的方式,在不同的时间调用回调,但我必须在相同的项处理中关联它们.
到目前为止,我的代码如下所示:
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail', )), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以在同一个项目中同时使用多个蜘蛛.其实我需要2只蜘蛛.第一个收集第二个蜘蛛应该刮的链接.他们都在同一个网站上工作,所以域名是相似的.这可能吗?如果是,你能举个例子吗?谢谢