记录一次用Python写爬虫的心得

现在网络爬虫有很多方式可以写,比如node.js或者go, 甚至php都行,我之所以选择python的原因是因为教程多,可以系统学习,因为光懂得使用html选择器来爬去页面是不够的,我还要想学习一些爬虫过程中常见的坑,以及一些注意事项,比如修改浏览器的header之类的小技巧。

代码注释都很详细了,其实只要直接阅读源码即可。

这个爬虫的目的很简单,爬去某个房产网站的楼盘名字+价格+1张图片的下载(单纯测试文件下载功能),以备之后分析房价走势而用,为了不给对方服务器增加太多压力,我只选择了爬取3个页面。

我这里说说几个需要注意的知识点吧:

#记得修改发送的Headers
听说默认发送过去的都是带有python信息的头,很容易被对方网站检查出是一个爬虫机器人,导致IP被封,所以最好让自己的爬虫程序像人类一点,但是这个代码只能起到一般的隐瞒,真的有网站想防止爬虫,你也是骗不过的,上代码:

立即学习“Python免费学习笔记(深入)”;

headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome",                "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"},

登录后复制

#html的选择器,我采用pyquery而不是beautifulsoup
很多书都推荐beautifulsoup,但是作为一个习惯了jquery的人来说,beautifulsoup的语法实在是有点拗口,而且貌似还不支持:first-child等高级复杂的css选择器模式,或者支持,但是我没找到,也不是很仔细看文档。

然后我网上找了一下资料,发现很多人推荐pyquery这个库,自己下来用了一下,发现真的很舒服,所以果断采用了。

#爬虫思路
思路其实很简单:
1.找到某个房产的列表页,分析第二第三页的URL结构;
2.获取每一个列表页的所有列表条目信息的URL,存入python的set()集合中,之所以用set,是为了去掉重复的URL信息。
3.通过获取的房子的URL,进入详情页,再爬去有价值的字段信息,比如图片文字之类的。
4.目前我只进行简单的print数据而已,没有把获取的数据存为本地的json或者CSV格式,这个之后做吧,to be done.

下面是全部代码代码:

#获取页面对象from urllib.request import urlopenfrom urllib.request import urlretrievefrom pyquery import PyQuery as pq#修改请求头模块,模拟真人访问import requestsimport time#引入系统对象import os#你自己的配置文件,请将config-sample.py重命名为config.py,然后填写对应的值即可import config#定义链接集合,以免链接重复pages = set()session = requests.Session()baseUrl = 'http://pic1.ajkimg.com'downLoadDir = 'images'#获取所有列表页连接def getAllPages():    pageList = []    i = 1    while(i 

登录后复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2282800.html

(0)
上一篇 2025年2月27日 19:42:19
下一篇 2025年2月19日 08:01:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python列表生成器

    在实际情况中,我们常常需要生成一些列表。除了比较低效的用for循环来一个一个往列表中append外,还有什么比较好的方法呢?python给我们提供了非常强大的创建列表的方式。 例如我们需要创建1~100的一个数据列表。 range(1,10…

    编程技术 2025年2月27日
    200
  • 怎么样用Python实现地理编码

    以物流行业为例,分析了 postgresql 与 greenplum 在地理位置信息处理,最佳路径算法,机器学习等方面的物流行业应用方法。其中提到了地址转换成坐标的问题,更专业些的名词应该是“地理编码”,即知道一个地址,如北京市海淀区上地十…

    2025年2月27日
    200
  • python-切片

    取一个list或者tuple的一部分是十分常见的操作。我们除了利用循环通过索引一个个获取元素外,python还为我们提供了方便的切片(slice)操作符:。 我们定义一个list,以供下面举例使用。 L = [‘apple&#8…

    编程技术 2025年2月27日
    200
  • Python 有序字典

    有序字典-OrderedDict简介 示例 有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的。参见下面的例子: import collectionsprint ‘Regular dictionary…

    编程技术 2025年2月27日
    200
  • Python linecache模块

    linecache 今天分享一个python的小模块: linecache, 可以用它方便地获取某一文件某一行的内容。而且它也被 traceback 模块用来获取相关源码信息来展示。用法很简单: >>> import li…

    编程技术 2025年2月27日
    200
  • Python 信号处理 signal 模块

    signal模块简介 最近在看linux signal 相关内容,signal可以被用来进程间通信和异步处理。python标准库提供了signal包可以用来处理信号相关。这里讨论的是unix系统中python的signal模块。 signa…

    编程技术 2025年2月27日
    200
  • Python中单线程、多线程和多进程的效率对比实验

    对比实验 资料显示,如果多线程的进程是cpu密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程;如果是io密集型,多线程进程可以利用io阻塞等待时的空闲时间执行其他线程,提升效率。所以我…

    2025年2月27日
    200
  • 一张图看懂Python Web高效开发

    一张图看懂Python Web高效开发,5秒看图,受益一生

    2025年2月27日
    200
  • python解析二维码

    由于需要对二维码图片进行解析,操作环境是centos7.2,python版本是2.7.5,由于zbar只支持到python2.6,所以准备采用源码编译安装的方式。具体步骤如下: 1、安装依赖包 yum install pdftk Image…

    2025年2月27日
    200
  • Python Scrapy爬虫:同步和异步分页的DEMO

    分页交互在请求数据时有同步和异步两种情况,同步时页面整体刷新,异步时页面局部刷新。对于这两种分页的数据在进行爬虫时,处理的方式是不一样的。 demo仅供学习,域名全部匿为test 同步分页 同步分页时,页面整体刷新,url地址栏会发生变化 …

    2025年2月27日
    200

发表回复

登录后才能评论