爬虫中遇到的问题汇总

------------------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的就不能被捕捉到呢,待解决。

时间: 2024-09-30 04:55:57

爬虫中遇到的问题汇总的相关文章

Elasticsearch在互联网应用中遇到的问题汇总

Elasticsearch在互联网应用中遇到的问题汇总 课程观看地址:http://www.xuetuwuyou.com/course/176/tasks 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:夜行侠 本课程主要是总结同学们在学习中以及老师本人自己在整es的时候遇到的问题汇总,要是以后还有问题,老师还会陆续更新 课程目录: 第1集es的问题汇总 第2集es的权限控制插件编写 第3集es的权限控制插件运行 第4集搜索的精准性控制 第5集解决搜索中英文数字混合

Mysql中常用的函数汇总

Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回值e(自然对数的底)的x次方floor(x) 返回小于x的最大整数值greatest(x1,x2,...,xn)返回集合中最大的值least(x1,x2,...,xn) 返回集合中最小的值ln(x) 返回x的自然对数log(x,y)返回x的以y为底的对数mod(x,y) 返回x/y的模(余数)pi(

Spring JdbcTemplate 查询方法中的RowMapper实现汇总

sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类. 我们在数据库查询中,如果返回的类型是用户自定义的类型(其实我们在数据库查询中大部分返回的都是自定义的类)则需要包装,如果是Java自定义的类型,如:String则不需要. 如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到. 可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法

使用ubuntu过程中遇到的问题汇总

使用ubuntu过程中遇到的问题汇总 1.使用图形界面设置免密码登录之后,改回密码登陆失效 解决方案: https://askubuntu.com/questions/211084/how-do-i-get-ubuntu-to-ask-me-for-a-password-at-login-again sudo gpasswd -d username nopasswdlogin 原文地址:https://www.cnblogs.com/wuyuanyuan/p/9742883.html

编程中易犯错误汇总:一个综合案例.md

# 11编程中易犯错误汇总:一个综合案例 在上一篇文章中,我们学习了如何区分好的代码与坏的代码,如何写好代码.所谓光说不练假把式,在这篇文章中,我们就做一件事——一起来写代码.首先,我会先列出问题,然后要求读者自己写一份答案:然后,我会给出我写的代码:最后,我们还会以这个问题为例,讨论编程中常见的错误. ## 1 问题描述 在[这个](http://wiki.openhatch.org/index.php?title=Scrabble_challenge)页面中,有一道Python相关的练习题,

简易“线程池”在Python网络爬虫中的应用

一,我是如何使用Python抓取网页的 我知道Python有一个爬虫框架scrapy,但是目前还没有学习,并且也没有什么很棘手的的问题需要去使用一个爬虫框架,所以我就用Python自带的urllib,将目标网页爬下来,然后用正则过滤出自己需要的内容. 二,效率问题 上面的方法简单,真的是上手即用,但是问题是效率问题,如果一个网页一个网页的抓,显然带宽无法达到最高,浪费了大部分带宽,这时候大部分人都会想到,多线程啊! 对,但是我们大部分人又都会写出下面的代码 # 总任务数有500个 while i

图形学编程中的部分经验汇总(以OpenGL为例)

由于图形学比较复杂,经常会遇到各种各样的小问题,这里做一个汇总,方便以后查找. 1.坐标系 一般来说,坐标系分为左手坐标系和右手坐标系.如图1所示,左图为右手坐标系,右图为左手坐标系.两个坐标系通过旋转.平移.缩放这几个操作是没有办法相互转化的.所以在处理顶点等数据的时候,要特别注意这些数据实在什么样的坐标系环境里.比如,我曾经写过一个程序,将3dmax中的模型导入opengl中.由于3dmax是用左手坐标系,而opengl是用右手坐标系,直接导入肯定会出问题.最简单的方法就是变换坐标次序,把<

android开发中遇到的问题汇总【二】

36.代码规范 http://liuzhichao.com/p/1781.html#more-1781 // Disallow Parent Intercept, just in case ViewParent parent = getParent(); if (parent != null) { parent.requestDisallowInterceptTouchEvent(true); } 38.在纯属布局中,将除最底部以外的的view都设置weight为1就可以了. 39.editvi

android开发中遇到的问题汇总【四】

92. Looks like there is no way to avoid modifications made by the import plugin. All the settings it has is three checkboxes related to dependency management. I tried to uncheck all of them but still it does change my project structure. I managed to