Scrapy 抓取疑惑问题,未解决!!!

时间:2022-04-20 21:39:34

版本python3.5 scrapy 1.4

抓取链家数据的时候,抓到一定数据量会卡住不前,不知道问题原因,在setting设置了一些参数,但是并没有感觉到效果。我记得以前使用scrapy设置timeout的时候,是有效果的,不知道为啥这次不行,就是卡住不前,不会超时重试
老师说记录详细日志,从日志中找答案,我还没有找到记录详细日志的方法。

DOWNLOAD_DELAY = 6  #设置时间间隔为1s,防止被禁
DOWNLOAD_TIMEOUT = 10 #设置超时时间
RETRY_ENABLED = True #设置开启重试
RETRY_TIMES = 3 #设置重试次数

未解决!!!

网址重定向这个问题使我头疼
https://sh.xzl.anjuke.com/zu/?t=5&suggestiontypeanjuke=7&kw=陆家嘴投资大厦

上面这个是搜索上海写字楼的网址,一般情况下搜索一个不存在的写字楼,安居客会提示不存在。但是,当搜索陆家嘴投资大厦的时候,不但不提示不存在,还会重定向到新的网址:
https://sh.xzl.anjuke.com/zu/
当关闭scrapy重定向功能,硬抓取第一个网址,会有正确的响应,但是无法找到相关信息,用原来正则表达式匹配信息出现异常
未解决!!!

重定向遇到的坑,不明白,我只是想单纯的搜索一下上海大厦诶

Python 3.5.4 (v3.5.4:3f56838, Aug  8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> a=requests.get('https://baike.baidu.com/item/%E4%B8%8A%E6%B5%B7%E5%A4%A7%E5%8E%A6').text
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python3.5\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\python3.5\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\python3.5\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\python3.5\lib\site-packages\requests\sessions.py", line 640, in send
history = [resp for resp in gen] if allow_redirects else []
File "C:\python3.5\lib\site-packages\requests\sessions.py", line 640, in <listcomp>
history = [resp for resp in gen] if allow_redirects else []
File "C:\python3.5\lib\site-packages\requests\sessions.py", line 140, in resolve_redirects
raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp)
requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
>>>

网上说可以禁止重定向,但是我禁止了之后什么也得不到啊,我就是想用python 3.5的requests库。。。

>>> a=requests.get('https://baike.baidu.com/item/%E4%B8%8A%E6%B5%B7%E5%A4%A7%E5%8E%A6',allow_redirects=False).text
>>> a
'<html>\r\n<head><title>302 Found</title></head>\r\n<body bgcolor="white">\r\n<center><h1>302 Found</h1></center>\r\n<hr><center>nginx</center>\r\n</b
ody>
\r\n</html>\r\n'

>>>

未解决!!!

在记录日志的时候,出现了两个小问题,

from scrapy.utils.log import configure_logging
configure_logging(install_root_handler=False)

一直没有明白上面两行代码的含义,感觉存在和去掉没有任何影响

logging.basicConfig(
filename='log.txt',
format='%(levelname)s: %(message)s',
level=logging.WARNING
)

另外上面的代码,我一开始理解level不同,记录的信息不同,经过讨论发现,上面的代码记录的是最基本的信息,level的不同不会影响基本信息的记录,那么level的作用是什么呢?

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

屏幕上打印:
WARNING:root:This is warning message

日志记录的默认级别是warning,比warning级别低的都不会记录,所以屏幕上不会打印debug和info信息,这样就可以解释level问题了,其实level对最基础的日志没有任何影响,level对logging.** 函数起作用。

header = { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'}

header = { 'User-Agent' : 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'}

r=requests.get(next_url,headers=self.header)
content=r.text

抓取信息的时候,防止被禁,用了上述代理,结果,很顺利的出了bug
一直以为是r.text这个获取的网页原信息不全,后来发现是代理头设置有问题,如果用第一个header没有问题,用第二个,get的url和相应的url不一样,分析我认为是代理里面出现了Android 6.0系统,这个会导致网页重定向,所以自然抓取的信息就不一致了

考虑到linux系统的优越性,故将scrapy迁移到cent os4.3系统上(没办法,只能用版本这么低的)

[***]$ lsb_release -a
LSB Version: :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:graphics-3.0-amd64:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: CentOS
Description: CentOS release 4.3 (Final)
Release: 4.3
Codename: Final

使用pip install scrapy 安装scrapy,发现卡到了安装cryptography上,问题如下:

ImportError: /lib64/tls/libc.so.6: version `GLIBC_2.14' not found

网上搜索了一下,是环境支持版本太低,尝试更新了一下环境,发现错误百出,于是放弃。一开始还以为是gcc版本低,更新了gcc版本,也没作用。尝试安装numpy,发现也有相同问题。
下载官网源代码安装包,然后再python setup.py install,也不行,还是同样错误
遂用.whl安装,先装上wheel,然后pip install **.whl,又遇到问题了,解决方法参考这个博客
终于安装成功,接下来继续!

2017.12.19 15:56
scrapy 安装成功了,但是却无法运行,显示Floating point exception
实在是烦心,查询应该是gcc、动态链接库的问题,等我有时间有心情的时候再解决吧
未解决!