我正在写一个网络爬虫从招聘板上抓取信息。我完成了我的第一个爬虫,但它有一些更多的问题要解决。
对于一些公司的标题,我得到这个ПАО\xa0
作为结果。这段文字是西里尔文,但我请求并保存为UTF-8
编码。本案例节点的属性和内容检查显示此文本内容:
ПАО
<!---->
'company's name'
这个<!---->
防止刮刀做它的工作很好,我还没有解决这个问题。你在刮擦的过程中遇到过这种情况吗?你能建议一个正确的方法来处理这个问题吗?
我使用scrapy
来处理它。
更新这里是代码(端点是隐藏的,因为他们的/robots.txt
拒绝所有爬虫,除了从关键的搜索引擎)
import scrapy
class HHSpider(scrapy.Spider):
name = 'hh-spider'
start_urls = [
'https:<ENDPOINT>'
]
def __init__(self):
self.BASE_URL = 'https://hh.ru'
self.JOB_SELECTOR = '.vacancy-serp-item-body'
self.JOB_TITLE_SELECTOR = '.serp-item__title::text'
self.JOB_COMPANY_SELECTOR = '.bloko-link_kind-tertiary::text'
self.JOB_COMPANY_URL_SELECTOR = '.bloko-link_kind-tertiary::attr(href)'
self.JOB_COMPENSATION_SELECTOR = '.bloko-header-section-2::text'
self.NEXT_SELECTOR = '.bloko-button[data-qa="pager-next"]::attr(href)'
def parse(self, response):
for vacancy in response.css(self.JOB_SELECTOR):
yield {
'jobTitle' : vacancy.css(self.JOB_TITLE_SELECTOR).get(),
'compensation' : vacancy.css(self.JOB_COMPENSATION_SELECTOR).get(),
'company' : vacancy.css(self.JOB_COMPANY_SELECTOR).get(),
'companyUrl' : self.BASE_URL + vacancy.css(self.JOB_COMPANY_URL_SELECTOR).get()
}
next_page = response.css(self.NEXT_SELECTOR).get()
if next_page is not None:
yield scrapy.Request(response.urljoin(next_page))
1条答案
按热度按时间gr8qqesn1#
解决这个问题的一个简单方法是在选择器上使用
getall()
方法,而不是get()
方法。这将以列表的形式返回注解之前和之后的所有文本。然后你可以使用类似''.join([...])
的东西来重新连接文本。举例来说:
部分输出: