首页 > 代码库 > 爬虫中遇到的问题汇总
爬虫中遇到的问题汇总
------------------3.10----------------------
在爬取某个网站时,直接用lxml.etree对response.content进行分析拿到的数据,与保存到本地后再分析拿到数据不一致
1 url = ‘http://op.hanhande.com/mh/‘ 2 HEADERS = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; rv:51.0) Gecko/20100101 Firefox/51.0 ‘} 3 4 #直接分析 5 response = requests.get(url, headers=HEADERS) 6 body = etree.HTML(response.content) 7 us = body.xpath(‘//div[@class="mh_list_li"]/ul/li/a/@href‘) 8 ts = body.xpath(‘//div[@class="mh_list_li"]/ul/li/a/text()‘) 9 print(len(us), len(ts)) 10 #保存后分析 11 with codecs.open(‘body.html‘, ‘w‘, encoding = response.encoding) as f: 12 f.write(response.content.decode(response.encoding)) 13 with codecs.open(‘body.html‘, ‘r‘) as f: 14 body = f.read() 15 body = etree.HTML(body) 16 us = body.xpath(‘//div[@class="mh_list_li"]/ul/li/a/@href‘) 17 ts = body.xpath(‘//div[@class="mh_list_li"]/ul/li/a/text()‘) 18 print(len(us), len(ts))
运行结果为:
14 14
582 582
猜测可能是编码的问题,但是不知道如何确定。
------------------3.08----------------------
文件非法命名的问题
在windows下如 ?\ * | “ < > : /;都是非法字符,不允许在文件名中出现,按正常来讲,一旦出现这种情况,应该会有异常抛出,但是在使用pycharm的时候,这个异常并没有被发现,而直接在cmd下运行python就会有异常抛出。
解决方法:
就是在创建文件时,对文件名进行判断,如果有非法字符就替换调,如:str.replace(‘?‘, ‘‘)
请求超时的问题
1 try: 2 response = await self.session.get( 3 url, allow_redirects = False, headers=HEADERS 4 ) 5 break 6 except aiohttp.ClientError as client_error: 7 exception = client_error
这是500lines 里 crawl 的连接部分的一小段代码,这个异常捕捉的确是可以捕捉到所有的连接异常,但是在实际运行中,超时异常并没有被捕捉到,不知道是否因为是windows的锅,但是后来再加上 except asyncio.TimeoutError 就可以捕捉到超时异常了。
ps:其实在看了源码之后,aiohttp.TimeoutError也是继承了 asyncio.TimeoutError的,那为什么aiohttp的就不能被捕捉到呢,待解决。
爬虫中遇到的问题汇总
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。