Python 1:我的spider在csv文件上一行代码中为我提供了所有结果
首先,如果我先使用extract_,scrapy会给我每个页面的第一个元素,如果我这样运行它,它会返回我想要的所有内容,但只返回一行 第二,我不能让scrapy转到我刚刚抓取的链接并从这些链接中获取信息,返回一个空的csv文件Python 1:我的spider在csv文件上一行代码中为我提供了所有结果,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,首先,如果我先使用extract_,scrapy会给我每个页面的第一个元素,如果我这样运行它,它会返回我想要的所有内容,但只返回一行 第二,我不能让scrapy转到我刚刚抓取的链接并从这些链接中获取信息,返回一个空的csv文件 from scrapy import Spider from companies.items import CompaniesItem import re class companiesSpider(Spider): name = "companies"
from scrapy import Spider
from companies.items import CompaniesItem
import re
class companiesSpider(Spider):
name = "companies"
allowed_domains = ['http://startup.miami',]
# Defining the list of pages to scrape
start_urls = ["http://startup.miami/category/startups/page/" + str(1*i) + "/" for i in range(0, 10)]
def parse(self, response):
rows = response.xpath('//*[@id="datafetch"]')
for row in rows:
link = row.xpath('.//h2/a/@href').extract()
name = row.xpath('.//header/h2/a/text()').extract()
item = CompaniesItem()
item['link'] = link
item['name'] = name
yield item
您的解析方法未生成任何请求或项。在下面的部分中,我们将浏览这些页面并获取URL和名称。在parse_详细信息中,可以向项目添加其他数据。 我们不必硬编码到10页,而是检查是否有下一页,如果有,则再次进行解析
from scrapy import Spider
from ..items import CompaniesItem
import scrapy
class CompaniesSpider(Spider):
name = "companies"
allowed_domains = ['startup.miami']
# Defining the list of pages to scrape
start_urls = ["http://startup.miami/category/startups/"]
def parse(self, response):
# get link & name and send item to parse_detail in meta
rows = response.xpath('//*[@id="datafetch"]/article')
for row in rows:
link = row.xpath('.//@href').extract_first()
name = row.xpath(
'.//*[@class="textoCoworking"]/text()').extract_first()
item = CompaniesItem()
item['link'] = link
item['name'] = name.strip()
yield scrapy.Request(link,
callback=self.parse_detail,
meta={'item': item})
# get the next page
next_page = response.xpath(
'//*[@class="next page-numbers"]/@href').extract_first()
if next_page:
yield scrapy.Request(next_page, callback=self.parse)
def parse_detail(self, response):
item = response.meta['item']
# add other details to the item here
yield item
要将结果放入csv文件中,您可以像这样启动刮板:
scrapy crawl companys-o test_companys.csv
谢谢您,Wim,不幸的是,这不起作用。此外,我还需要获取我试图获取的链接中的信息。我发布的代码有很多问题-现在编辑和测试,应该可以更好地工作。试着这样运行:scrapy crawl companies-s LOG\u LEVEL=DEBUG-o test\u companies.csv
,看看您是否能得到正确的请求响应。Genius!这非常有效。非常感谢你的帮助!