小编Bil*_*hon的帖子

破烂。在spider_close调用后如何产生项目?

我只想在爬行完成时产生一个项目。我正在尝试通过

def spider_closed(self, spider):
    item =  EtsyItem()
    item['total_sales'] = 1111111
    yield item 
Run Code Online (Sandbox Code Playgroud)

尽管调用了该函数,但它不会产生任何结果。抓取结束后如何生成项目?

scrapy

6
推荐指数
1
解决办法
441
查看次数

禁用 Selenium Chrome 驱动程序的日志记录

我将 selenium 与 Scrapy 一起使用,它会产生太多的日志。 在此处输入图片说明 我之前尝试过 SO 提供的几种解决方案,但都没有奏效。基本上我尝试禁用它options并传递service-argument将日志写入文件。在这两种情况下,日志在执行时仍会打印。我如何解决它?

options = Options()
options.headless = True
# options.add_argument('--disable-logging')
self.driver = webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options, service_args=["--verbose", "--log-path=D:\\qc1.log"])   
Run Code Online (Sandbox Code Playgroud)

我还尝试将服务路径设置为NULL(我运行 Windows)

self.driver = `webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options, service_log_path='NUL')`
Run Code Online (Sandbox Code Playgroud)

解决方案: 感谢 - @Manmohan_singh 和 迄今为止唯一有效的答案 添加这个

chrome_options.add_argument("--log-level=3") to shut the logging.
self.driver = webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options) 
Run Code Online (Sandbox Code Playgroud)

希望这在未来会有用,因为没有一个可能重复的主题对我有帮助,而且 Stack 版主似乎没有仔细阅读这些帖子。

selenium scrapy selenium-chromedriver

5
推荐指数
0
解决办法
4116
查看次数

链接中包含特定关键字的 href 的 xpath

我需要的是找到页面上所有在链接本身中有一些关键字的链接。因此,基于一些堆栈主题,我按如下方式构建我的 xpath:

response.xpath('//a[contains(@href,'/Best-Sellers-Health-Personal-Care')]')
Run Code Online (Sandbox Code Playgroud)

这应该返回一个链接,如 =“ https://www.amazon.com/Best-Sellers-Health-Personal-Care-Tongue ......”

但我总是收到无效的语法错误。我错了什么?所以我现在所做的只是在遍历列表时添加 if contains 检查。但希望有更优雅、更快速的解决方案。

python xpath scrapy

4
推荐指数
1
解决办法
4164
查看次数

scrapy如何从scrapinghub的文件加载url

我知道如何在本地工作时从外部源将数据加载到 Scrapy 蜘蛛中。但是我很难找到有关如何将此文件部署到 scrapinghub 以及在那里使用什么路径的任何信息。现在我使用 SH 文档中的这种方法 -在此处输入链接描述但收到 NONE 对象。

import pkgutil

class CodeSpider(scrapy.Spider):
name = "code"
allowed_domains = ["google.com.au"]

def start_requests(self, ):

    f = pkgutil.get_data("project", "res/final.json")
    a = json.loads(f.read())
Run Code Online (Sandbox Code Playgroud)

谢谢。我的安装文件

from setuptools import setup, find_packages

setup(
    name         = 'project',
    version      = '1.0',
    packages     = find_packages(),
    package_data = {'project': ['res/*.json']
    },
    entry_points = {'scrapy': ['settings = au_go.settings']},

    zip_safe=False,

)
Run Code Online (Sandbox Code Playgroud)

我得到的错误。

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 127, in _next_request
    request = next(slot.start_requests)
  File "/tmp/unpacked-eggs/__main__.egg/au_go/spiders/code.py", line 16, …
Run Code Online (Sandbox Code Playgroud)

scrapy scrapinghub

4
推荐指数
1
解决办法
932
查看次数

如何去掉 Ipython Pandas 中的斜体并获得纯文本?

我正在 Python 3 中将文本保存到 csv 文件。文本很干净,没有任何标签。这是它在记事本中的样子: 在此输入图像描述

这是我的文本灯泡:

  unicodedata.normalize('NFKD',' '.join(i[1:-1]) 
).encode('ascii','ignore').decode()
Run Code Online (Sandbox Code Playgroud)

这是我保存它的方法:

def save(filename, data):
    with open(r"path to file\{}.csv".format(filename),"a",encoding="utf-8"  ) as f:
        w = csv.DictWriter(f, [coulm names],lineterminator="\n")
        w.writeheader()
        w.writerows(data[:10])
Run Code Online (Sandbox Code Playgroud)

当我在 Ipython Pandas 中将文件作为 DataFrame 打开时,我可以看到不同样式的文本,如下所示: 在此输入图像描述

我如何摆脱它并使所有文本看起来都一样?PS 在 gsheets 中一切看起来都很好: 在此输入图像描述 附言。我在 pandas 中使用以下命令:

data_full = pd.read_csv("restaurant_menu_with_entryurl_full.csv", encoding = 'utf8')
Run Code Online (Sandbox Code Playgroud)

附言。另外,如果我在 pandas 中选择单列视图,文本看起来会很统一。 在此输入图像描述

ipython python-3.x pandas jupyter-notebook

4
推荐指数
1
解决办法
1818
查看次数

ValueError:无效\ escape:在Scrapy中读入JSON作为响应时

在解析过程中,我得到带有json的文本对象响应。它们看起来非常相似。其中一些工作没有任何错误。但是其他人则抛出如下错误。

我试图使用replace('\r\n', ''), strict=False.无济于事。

这是我从json获取的URL- 此处输入链接描述这是我的代码。(第51行是data=json.loads

另外,当我在scrapy shell中尝试此url时,它会打开为空并引发另一个错误-找不到json文档。不知道这是否重要。

def parse_jsn(self, response):
        #inspect_response(response, self)

        data = json.loads(response.body_as_unicode())
        item = response.meta['item']
        item['text']= data[0]['bodyfull']
        yield item
Run Code Online (Sandbox Code Playgroud)

这是错误代码。

ValueError: Invalid \escape: line 4 column 942 (char 945)
2017-03-25 17:21:19 [scrapy.core.scraper] ERROR: Spider error processing <GET
or.com/UserReviewController?a=mobile&r=434622632> (referer: https://www.tripa
w-g60763-d122005-Reviews-or490-The_New_Yorker_A_Wyndham_Hotel-New_York_City_N
Traceback (most recent call last):
  File "c:\python27\lib\site-packages\scrapy\utils\defer.py", line 102, in it
    yield next(it)
  File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\offsite.py", l
der_output
    for x in result:
  File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\referer.py", l
    return (_set_referer(r) …
Run Code Online (Sandbox Code Playgroud)

python json scrapy

3
推荐指数
1
解决办法
5321
查看次数

Scrapy 项目输出为元组而不是列表

无论出于何种原因,所有项目都作为元组返回。不知道我错过了什么。在所有其他蜘蛛和项目中,它只是一个列表(当我使用提取()时)。

{'acne': (None,),
'function': ([u'\u2027Preservative'],),
'function0': u'\u2027Preservative',
'irritant': (None,),
'name': (u'Potassium Sorbate',),
'safety': (u'3',),
'url': 'http://cosdna.com/eng/383bb7435.html'}
Run Code Online (Sandbox Code Playgroud)

这是我的蜘蛛代码。

def parse(self, response):
    inspect_response(response, self)
    a = response.xpath('//table//tr')

    for i in a:
        item = CosdnaExtItem()
        item['name'] = i.xpath('./td/a/text()').extract_first(),
        item['url'] = i.xpath('./td/a/@href').extract_first(),
        item['function'] = i.xpath('.//td[2]/span//text()').extract(),
        item['acne'] = i.xpath('.//td[3]/span//text()').extract_first(),
        item['irritant'] = i.xpath('.//td[4]/span//text()').extract_first(),
        item['safety'] =  i.xpath('.//td[5]/div//text()').extract_first(),

        yield item
Run Code Online (Sandbox Code Playgroud)

scrapy

0
推荐指数
1
解决办法
491
查看次数

Scrapinghub shub部署错误-错误:部署失败(400):项目:non_field_errors

当我尝试将其部署到云中并遇到以下错误时。

Error: Deploy failed (400):
project: non_field_errors
Run Code Online (Sandbox Code Playgroud)

我当前的设置如下。

def __init__(self, startUrls, *args, **kwargs):

    self.keywords = ['sales','advertise','contact','about','policy','terms','feedback','support','faq']

    self.startUrls = startUrls

    self.startUrls = json.loads(self.startUrls)

    super(MySpider, self).__init__(*args, **kwargs)

def start_requests(self):

    for url in self.startUrls:

        yield Request(url=url)
Run Code Online (Sandbox Code Playgroud)

scrapy python-2.7 scrapinghub

0
推荐指数
1
解决办法
385
查看次数