Итак, технически Scrapy дает мне правильную информацию, когда я говорю, чтобы она очищала:
link = row.xpath('.//p/a/@href').extract_first()
Проблема в том, что я получаю "/ biz / polkadog-bakery-boston? Osq = Dog«как показано в HTML-коде (см. изображение 1), но я хочу получить (2 на изображении)» https://www.yelp.com/biz/polkadog-bakery-boston?osq=Dog",, которое отображается только при наведении курсора на «ссылку».
image
Я хотел бы получить это, чтобы я мог проанализировать информацию на внутренних страницах.
Я пытался искать что-то подобное, но мне не повезло.
Если я не достаточно ясно, пожалуйста, дайте мне знать, прежде чем дать мне плохую оценку.
Спасибо
вот полный паук:
from scrapy import Spider
from yelp.items import YelpItem
import scrapy
import re
class YelpSpider(Spider):
name = "yelp"
allowed_domains = ['www.yelp.com']
# Defining the list of pages to scrape
start_urls = ["https://www.yelp.com/search?find_desc=Dog&find_loc=Boston%2C%20MA&start=" + str(10 * i) for i in range(0, 1)]
def parse(self, response):
# Defining rows to be scraped
rows = response.xpath('//*[@id="wrap"]/div[3]/div[2]/div[2]/div/div[1]/div[1]/div/ul/li')
for row in rows:
# Scraping Busines' Name
name = row.xpath('.//p/a/text()').extract_first()
# Scraping Phone number
phone = row.xpath('.//div[1]/p[1][@class= "lemon--p__373c0__3Qnnj text__373c0__2pB8f text-color--normal__373c0__K_MKN text-align--right__373c0__3ARv7"]/text()').extract_first()
# scraping area
area = row.xpath('.//p/span[@class = "lemon--span__373c0__3997G"]/text()').extract_first()
# Scraping services they offer
services = row.xpath('.//a[@class="lemon--a__373c0__IEZFH link__373c0__29943 link-color--inherit__373c0__15ymx link-size--default__373c0__1skgq"]/text()').extract_first()
# Extracting internal link
link = row.xpath('.//p/a/@href').extract_first()
item = YelpItem()
item['name'] = name
item['phone'] = phone
item['area'] = area
item['services'] = services
item['link'] = link
yield item
def parse_detail(self, response):
item = response.meta['item']
address = response.xpath('.//*[@id="wrap"]/div[2]/div/div[1]/div/div[4]/div[1]/div/div[2]/ul/li[1]/div/strong/address/text()[1]').extract_first()
item['address'] = address
yield item