> 文档中心 > 用python写个爬虫应该思考什么内容(1)?

用python写个爬虫应该思考什么内容(1)?


案例设定

  • 项目目标
    1、分析某个区域房价的走势
    2、分析某个区域房价的活跃程度
    3、分析某个区域周边房子的投资价值
    4、分析某个区域新房的可能定价是相对合理

  • 数据来源
    1、网络第三方数据购买,通常安年收费,起步价格5万+
    2、自己构建爬虫系统采集网络信息,特别是行业政府网站数据,例如房官局;

  • 思考点(很重要,这个是工作做好的纲要)
    1、 技术选型
    2、数据维度分析:楼盘信息、房源类型、周成交价、周成交套数(>2)、周边配套 、学区情况 、政府规划信息、新房摇号、区域信息
    3、安排技术调研可行信息,开始技术开发

  • 技术难点
    1、如何被反爬呢? 多代理IP(选择代理IP商是大坑)、伪装访问头、访问随机(例如分页,你不要从1一直爬到结尾,这就糟糕了)、模拟正常访问
    2、如何应对对方修改? 各种错误处理,否则你的爬虫不稳定,也许2天,也许3个月就不能用了,如果是技术外包你要充分考虑到这个问题,对于数据解析模块,特别是各维度的信息提前尽量要独立封装后台可配置.

技术选型

前提是你已经确认自己写的爬虫到底是做什么用?要实现那些功能,然后就是技术路线的选择了,这里你离不开框架(表示在你爬虫中要用到的各种第三方库)的选择,当然如果你也想全部都自己写。

scrapy 框架

官网: https://scrapy.org/ (个人建议尽量从官网下载)
scrapy是非常很强大的爬虫框架,可以满足简单的网页的抓取工作,这里我个人推荐:(https://www.runoob.com/w3cnote/scrapy-detail.html ) 这个网址去入门,但是需要深度学习还是需要看官网的文档;

找个框架满大的并发要求,抓取网页,异步下载、数据分析(你需要单独解析器)但是对分布式的处理本人也在学习中;

Selenium

这个在自动化测试中是非常好用的东西,也是大名鼎鼎,可以模拟人正常操作网页,但是对移动段无能为例;
官网:(https://www.selenium.dev/) 你可以取下载对于的python库,但是由于太出名了,于是采用他的访问特征(该框架自带很多访问特征),都被反爬软件收集和处理,***如果用他去爬大官网、大公司网站是非常不靠谱的。***,应为Selenium的很多特征参数你是无法修改的,我曾经用他失败的很惨。这个东西用于项目自动化测试那是太爽了。

Appium

这个也是自动化测试中的一个东西,可以自动操作移动段APP,非常好用,这里就这样简单提一下吧;和我项目不对口。

HTML解析

通常从对方网站上抓取下来的内容都是以HTML文本出现,你很少可以直接调用对方的api接口获取json数据的,除非对方网站的对被爬的数据不敏感或者是在是没有注意到爬虫事情。为此如何处理这些看似很乱的文本呢?

您可以用BeautifulSoup这个工具包的,它提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能 ,他本身不解析HTML,但是可以通过【注入】不同的解析器(Parser),将HTML文本转化成python对象,这样就便于各种操作了,要不然你只能采用正则,很多人看到正则头就大三圈,在我离校5年内我也是如此,抽时间好好写篇文章谈谈我的理解。

你要单独安装 bs4 这个包,才有BeautifulSoup,不要弄错了哦

from bs4 import BeautifulSoupsoup = new   BeautifulSoup(‘‘我要解析的HTML’ ,‘html.parser’)# 例如这样# 在文档中出现div 并且css样式类名为item的内容,返回一个数组# class_  这么写,你没有看错,原因class是的关键词,于是就多个尾巴了infos = soup.find_all("div",class_="item")

1、html.parser : 这个是python只带的HTML解析器,不需要安装直接可以使用

2、lxm.html: 也是一个优秀的不得了的html解析器,比 html.parser 速度快,但是不是python只带的,你需要安装lxm这个包,这个解析器的最大优点就是有html自动纠错功能,对于那些没有闭合的html标签自动做了闭合处理,而在html.parser 可能直接就报错或者直接忽略到另外一侧div中,这个是可怕的。 我目前都使用这个库处理;

基本结够

先不采用 scrapy,只有request 方式

#!/usr/bin/env python3# -*- coding: UTF-8 -*-import reimport urllibimport requestsfrom bs4 import BeautifulSoupfrom lxm import lxm#信息处理方式: 便于以后扩展(最终我把这个内容放入了数据库)linkfind = re.compile(r'')namefind = re.compile('(.*?)')#主程序def spider():    baseurl="https://tmsf.com"    for i in range (1):  #爬取10次网页 url_ = baseurl + str(i) html = getDate(url_)  #数据保存 #数据处理 soup = BeautifulSoup(html,"lxm.html") for date_ in soup.find_all("div",class_="item"):     date_=str(date_)     link_ = re.findall(linkfind,date_)[0]     name_ = re.findall(namefind,date_)[0]     print(name_)     #获取数据:这个我最后加入了反爬(随机文件头,每次不一样,收集的1K 的 Cookei 随机等等绕过对方额反爬系统 )def getDate(url_):    headers={     'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"    }    html = requests.get(url_,headers=headers)    #print(html.text)    return html.text#存储数据:  采用mysqk存储 def saveDate():    passif __name__ == "__main__":    spider()

以上就是我最初框架了,但是项目到最后,全部改了

如果需要源码可以微信联系我@smartcat01

感谢每一位阅读者,感谢!