无法使用 link 提取器规则使用 scrapy 来抓取元素
unable to scrape elements using link extractor rule using scrapy
我正在尝试抓取 this 网站,我想要地址和联系方式,但我不知道为什么我得到 None 作为输出,我想要的数据存在于响应但我无法抓取它请告诉我哪里做错了,我浪费了很多时间,只是卡住了
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class MobilesSpider(CrawlSpider):
name = 'mobiles'
allowed_domains = ['www.vcsdata.com']
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
def set_user_agent(self, request, response):
request.headers['User-Agent'] = self.user_agent
return request
def start_requests(self):
yield scrapy.Request(url='https://www.vcsdata.com/companies_gurgaon.html',
headers={
'User_Agent': self.user_agent
})
rules = (
Rule(LinkExtractor(restrict_xpaths=('//div/a[@class="text-dark"]')), callback='parse_item', follow=True, process_request='set_user_agent'),
)
def parse_item(self, response):
data = response.url
print(data)
address = response.xpath('/html/body/div/section[2]/div/div/div[1]/div[2]/div[2]/div/div/div[1]/h6/text()').get()
print(address)
您的 XPath 选择器可能有一些错误。但是,我建议您避免使用文档根目录中的完整 XPath。尽管它有效,但它非常脆弱,因为即使 HTML 中的微小更改也会破坏您的解析。通过使用 //
代替,您将拥有一个更短且更可靠的选择器,例如
response.xpath('//h6[contains(., "Address")]/text()').get()
此外,您可以定义 User-Agent in Scrapy settings(例如,在 settings.py
文件中或使用 custom_settings
属性),而不是使用 set_user_agent
方法:
USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
我正在尝试抓取 this 网站,我想要地址和联系方式,但我不知道为什么我得到 None 作为输出,我想要的数据存在于响应但我无法抓取它请告诉我哪里做错了,我浪费了很多时间,只是卡住了
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class MobilesSpider(CrawlSpider):
name = 'mobiles'
allowed_domains = ['www.vcsdata.com']
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
def set_user_agent(self, request, response):
request.headers['User-Agent'] = self.user_agent
return request
def start_requests(self):
yield scrapy.Request(url='https://www.vcsdata.com/companies_gurgaon.html',
headers={
'User_Agent': self.user_agent
})
rules = (
Rule(LinkExtractor(restrict_xpaths=('//div/a[@class="text-dark"]')), callback='parse_item', follow=True, process_request='set_user_agent'),
)
def parse_item(self, response):
data = response.url
print(data)
address = response.xpath('/html/body/div/section[2]/div/div/div[1]/div[2]/div[2]/div/div/div[1]/h6/text()').get()
print(address)
您的 XPath 选择器可能有一些错误。但是,我建议您避免使用文档根目录中的完整 XPath。尽管它有效,但它非常脆弱,因为即使 HTML 中的微小更改也会破坏您的解析。通过使用 //
代替,您将拥有一个更短且更可靠的选择器,例如
response.xpath('//h6[contains(., "Address")]/text()').get()
此外,您可以定义 User-Agent in Scrapy settings(例如,在 settings.py
文件中或使用 custom_settings
属性),而不是使用 set_user_agent
方法:
USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'