Python 每个项目有多个页面-使用刮取的链接
我的水龙头看起来像这样Python 每个项目有多个页面-使用刮取的链接,python,web,web-scraping,scrapy,Python,Web,Web Scraping,Scrapy,我的水龙头看起来像这样 class ScrapeMovies(scrapy.Spider): start_urls = [ 'https://www.trekearth.com/members/page1.htm?sort_by=md' ] def parse(self, response): for row in response.xpath('//table[@class="member-table"]//tr[position()
class ScrapeMovies(scrapy.Spider):
start_urls = [
'https://www.trekearth.com/members/page1.htm?sort_by=md'
]
def parse(self, response):
for row in response.xpath('//table[@class="member-table"]//tr[position() > 1]'):
item = loopitem()
website = row.xpath('./td[2]//a/@href/text()').extract_first()
item['name'] = row.xpath('./td[2]//a/text()').extract_first()
yield item
# This part is responsible for scraping all of the pages on a start url commented out for convinience
# next_page=response.xpath('//div[@class="page-nav-btm"]/ul/li[last()]/a/@href').extract_first()
# if next_page is not None:
# next_page=response.urljoin(next_page)
# yield scrapy.Request(next_page, callback=self.parse)
它所做的一切都会刮表(参见起始url)。我希望它然后转到链接(成员名称列),然后从这个链接中提取一些信息(例如链接),并将其作为一个项目返回
我应该如何处理这个问题
如果有任何不清楚的地方,请不要犹豫要求澄清
编辑:
现在,我的代码如下所示(但仍然不起作用):
使用字段将项前推到下一个回调
def parse_page1(self, response):
item = MyItem(main_url=response.url)
request = scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
request.meta['item'] = item
return request
def parse_page2(self, response):
item = response.meta['item']
item['other_url'] = response.url
return item
UPD:要处理所有行,请在循环中使用yield
for row in response.xpath('//table[@class="member-table"]//tr[position() > 1]'):
item = FinalItem()
website = row.xpath('./td[2]//a/@href/text()').extract_first()
item['name'] = row.xpath('./td[2]//a/text()').extract_first()
request = scrapy.Request(website,
callback=self.parse_page2)
request.meta['item'] = item
yield request
谢谢但是现在我应该什么时候把代码的最后一部分从第1页一直放到最后(你有一个用户名列表,在我从这个表中抓取的页面数量上+从概要文件链接中获取的信息)?我看到两个问题,一个是使用通过xpath(变量xpath)提取的网站地址,另一个是如何正确地将其合并在一起?我的意思是为每个用户访问这些链接,然后从第1页一直跟踪到最后?我不理解您试图解决的任务。一个项目可以包含来自多个页面的数据-我向您展示了如何访问我正在使用的页面。我想删除trekearth.com/members上的表(所有页面,现在您有1到300页),然后我想访问每个用户配置文件并将其中的信息添加到我的主要输出。@Mrowkacala我更新了答案。请让我们完成这个问题,你可以接受。因为所有其他错误都与主题无关。我不能只为你写一个刮刀。如果你还有其他问题,提出新问题。你可以在评论中提到我,我来看看。
for row in response.xpath('//table[@class="member-table"]//tr[position() > 1]'):
item = FinalItem()
website = row.xpath('./td[2]//a/@href/text()').extract_first()
item['name'] = row.xpath('./td[2]//a/text()').extract_first()
request = scrapy.Request(website,
callback=self.parse_page2)
request.meta['item'] = item
yield request