Scrapy 使用crawl模板创建spider的注意:
我们默认创建scrapy的时候使用的是template是basic模板
scrapy genspider ~~spider名称~~ ~~allowed_domains~~
当使用crawl模板创建
scrapy genspider -t crawl ~~spider名称~~ ~~allowed_domains~~
spider 内容如下:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class CheSpider(CrawlSpider):
name = "che"
allowed_domains = ["xxxx.com"]
start_urls = ["https://xxxx.com"]
rules = (
Rule(lLinkExtractor(allow=r''), callback="parse_item", follow=False) )
def parse_item(self, resp, **kwargs):
item{}
return item
以下是修改后的内容:
class CheSpider(CrawlSpider):
name = "che"
allowed_domains = ["che168.com"]
start_urls = ["https://www.che168.com/chengdu/8_10/a1_3ms8dgscncgpi1ltocspexx0/"]
# 提取详情页面的url
lk1 = LinkExtractor(restrict_xpaths=('//ul[@class="viewlist_ul"]/li/a'))
# 提取分页的url
lk2 = LinkExtractor(restrict_xpaths=('//div[@id="listpagination"]/a'))
# rules 规则
rules = (
# parse_item的作用:当整个相应回来之后,经过链接提取器的提取拿到url,会自动发送请求。
# 这个详情页面的url响应回来之后,去执行callback
# follow 表示链接提取器提取的链接,发送请求回来之后,是否需要执行当前所有规则
# follow 控制当前被提取到的链接是否把规则重新走一遍
Rule(lk1, callback="parse_item", follow=False), # 详情页的逻辑
Rule(lk2, follow=True) # 分页的逻辑, 这里不需要callback的
)
def parse_item(self, resp, **kwargs):
print(resp.url)