#python #python-3.x #web-scraping #scrapy
#питон #python-3.x #соскабливание полотна #шершавый
Вопрос:
Я создал скрипт, чтобы очистить name
, phone
и email
адреса разных магазинов от yellowpages.com . Я использовал async
метод в scrapy для анализа адреса электронной почты с внутренних страниц при анализе имени и телефона с целевой страницы. Сценарий работает нормально.
Чего я не могу понять, так это как я могу использовать headers
или dont_filter=True
внутри встроенных запросов. На самом деле я имел в виду следующее.
request = response.follow(email_url)
resp = await self.crawler.engine.download(request, self)
паук, которого я использую:
import scrapy
from scrapy.crawler import CrawlerProcess
class YellowpagesSpider(scrapy.Spider):
name = "yellowpages"
start_urls = ["https://www.yellowpages.com/search?search_terms=Coffee Shopsamp;geo_location_terms=San Francisco, CA"]
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
def start_requests(self):
for start_url in self.start_urls:
yield scrapy.Request(start_url,headers=self.headers)
async def parse(self, response):
for items in response.css("[class='result'] .v-card > .info"):
name = items.css("a.business-name > span::text").get()
phone = items.css("div.phones::text").get()
email_url = items.css("a.business-name::attr(href)").get()
request = response.follow(email_url)
resp = await self.crawler.engine.download(request, self)
email = resp.css("a.email-business[href^='mailto:']::attr(href)").get()
yield {"Shop name": name, "Phone": phone, "Email": email}
if __name__ == "__main__":
c = CrawlerProcess()
c.crawl(YellowpagesSpider)
c.start()
Ответ №1:
Вы можете передать это само по follow
себе. follow
методы принимают все параметры, которые __init__
поддерживает a
response.follow(email_url, dont_filter=True, headers=self.headers)
https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Response.Подписаться