我跟着链接
https://stackoverflow.com/questions/19254630/how-to-use-scrapy-to-crawl-all-items-in-a-website
但事情对我来说不起作用。
我正在尝试通过网络学习数据。我正在实施http://scrapy.readthedocs.io/en/latest/intro/examples.html
上的教程并且能够抓取指定的链接 这是示例代码快照
from scrapy.spiders import Spider
from scrapy.selector import Selector
from dirbot.items import Website
class DmozSpider(Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/",
]
def parse(self, response):
"""
The lines below is a spider contract. For more info see:
http://doc.scrapy.org/en/latest/topics/contracts.html
@url http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/
@scrapes name
"""
sel = Selector(response)
sites = sel.xpath('//ul[@class="directory-url"]/li')
items = []
for site in sites:
item = Website()
item['name'] = site.xpath('a/text()').extract()
item['url'] = site.xpath('a/@href').extract()
item['description'] = site.xpath('text()').re('-\s[^\n]*\\r')
items.append(item)
return items
项目的和代码捕捉是
from scrapy.item import Item, Field
class Website(Item):
name = Field()
description = Field()
url = Field()
我可以使用scrapy crawl dmoz
但无法实现以下内容
1. All given link on website
2. Didn't get all text from all possible link
3. Want to save them to a file
有人可以指导我,我的代码需要做哪些更改才能实现我的目标?
答案 0 :(得分:0)
网站上的所有指定链接
回复中没有class="directory-url"
。
您可以使用sites = sel.xpath('//a/@href')
而不是网站从网站获取所有指定的链接。过滤所需的网址
或者
如果您可以从主域(http://www.dmoz.org/
)开始,例如
doc = html.fromstring(response.body)
sites = doc.xpath('.//section[@id="category-section"]//aside')
for site in sites:
item = StackDemoItem()
item['name'] = site.xpath('.//div/h2/a/text()')
item['url'] = site.xpath('.//div/h2/a/@href')
您必须使用item['url']
附加域名才能获得正确的网址。对于其他网页的url路径,请执行相同的操作。
没有从所有可能的链接中获取所有文字
大多数链接都没有文字。所以你必须从url本身剥离内容.else text = sel.xpath('//a/text()')
想要将它们保存到文件中
您可以使用scrapy crawl your_crawler_name -o out.csv
简单地保存内容,使用json或txt代替csv来处理这种文件。