用于存放一些爬虫脚本
- 使用requests库爬取榜单
- 分析第1步获取的HTML数据,使用正则表达式过滤采集需要的信息字段,使用生成器存储字段数据,加上re.S参数连换行符一起输出
- 存储到log文件中
- 多线程爬取
- get请求没有加User-Agent的header,爬虫被拒绝访问,添加后解决
- 期待度的2个数字不显示
原因:源代码中展示的并不是纯粹的数字。而是在页面使用了font-face定义了字符集,并通过unicode去映射展示。简单介绍下这种新型的web-fongt反爬虫机制:使用web-font可以从网络加载字体
- 学会了基本的requests操作,请求和分析一个静态页面
- 学会了基本的正则表达式操作,通过()获取得到不同的关键字,提取得到需要的信息
- 基本的写入文本文件操作
- 遇到最简单的反爬虫,加入header参数里面的user-agent即可
- 最简单的多线程抓取,map函数的使用
- 字符串转JSON生成字典,使用json.loads()方法
- 用生成器存储算法,而不是直接生成字典,避免存储空间浪费,在需要用到数据的时候,使用for循环调用生成器生成数据即可
- 保存到文件使用中文的时候,open方法中要使用encoding='utf-0',write方法中要使用ensure_ascii=False)
- 使用requests库爬取得到首页信息,返回的HTML代码中不包含需要的信息,都是些JS
- 在XHR中找到JSON请求和数据
- 使用request.get方法请求JSON数据,使用urlencode()生成完成的URL
- 在第3步中得到一个字符串,使用json.loads()方法生成字典形式的JSON变量,通过keys()方法获取需要的标题信息,定义成生成器,得到所有的
- 使用for循环调用第4步中的生成器,返回每个文章的url,传递给请求详情页的函数
- 如果请求到了详情页,那么解析详情页,需要从返回的HTML代码中获取字段信息,因此采用BeautifulSoup进行解析
- 用bs的select()方法获取title,并用get_text()取出第一个内容
- 使用正则表达式从解析后的页面中找到图片地址,返回的是一个字符串
- 第一次用json.load()返回的依然是1个字符串,需要嵌套多1层json.load()
- 在第9步返回的JSON变量中,使用get()方法提取所有图片的地址,返回一个list,再使用for循环,遍历返回的list,得到所有图片的下载地址,并下载,把结果保存到MongoDB
- 第9步的字符串也是反爬的手段之一,需要使用2次json.loads()
无
- 分析AJAX返回的网页
- 使用BeautifulSoup解析网页,并获取需要的信息
- 字符串转JSON常量
- 保存图片
- 使用geckodriver驱动firefox访问淘宝首页,输入关键词,点击搜索按钮,翻页,点击确定按钮,采集信息,存储到mongodb,导出成CSV文件,统计程序运行时间
- 使用selenium的WebDriverWait(browser,10).until(expected_conditions.条件((By.条件,'条件')))方法,判断输入框是否加载完成,搜索按钮是否出现
- 使用send_keys()方法,输入关键字,使用click()方法,点击搜索
- 获取第1页的产品信息
- 使用第2步的方法,判断总页数是否出现,用text方法返回string
- 翻页的方法使用,使用第2步的方法,判断输入框是否出现,确定按钮是否出现,调用clear()方法清空输入框,send_keys()方法输入页码,click()方法点击按钮
- 使用第2步的方法,判断高亮的页码是否为翻页需要的页码
- 每获取1页翻页,就获取1页产品信息
- 产品信息的解析,使用pyquery库,首先使用第2步的方法,判断整个页面加载完成,即产品框的frame都出现了
- 提取需要的产品信息字段,存储到MONGODB
- Chrome版本和ChromeDriver不匹配,改为使用firefox
- 使用PhantomJS报错,设置窗口大小后解决
- 从mongodb导出到csv文件,首次打开为乱码,用的是utf-8 without BOM编码,windows下需要使用utf-8,用notepad++打开csv文件设置一下编码保存即可
- 从firefox复制的CSS选择器格式错误,改用chrome
- 使用PhantomJS程序的运行时间: 251.23947518380507,而使用firefox的程序的运行时间: 143.89224086472169,所以其实并不是无界面浏览器就快
- 图片链接没有抓取完全,提取图片信息属性的时候应该直接使用data-src
- 初步学会使用selenium采集JS渲染的页面
- mongodb导出
- CSS选择器使用
- 网页结果分析,HTTP和AJAX以及JS基础
- 数据结构存储的学习
- 程序化的学习
- 异常处理
参考链接:https://github.com/wzyonggege/Mzitu-Crawler/blob/master/mzitu.py
爬取http://www.mzitu.com/hot/的文章图片
- 先请求http://www.mzitu.com/hot/首页
- 分析首页HTML代码,用正则表达式获取一共有多少后翻页数,后续的url格式是http://www.mzitu.com/hot/页码
- 在"http://www.mzitu.com/hot/页码"中查找图片页的地址,使用正则表达式
- 把图片详情页的url作为参数,传入main函数,首先请求图片详情页,使用正则表达式查找是有多少张图片,使用图片详情页的url和图片的索引,可以组合出图片页的真实url,使用正则表达式获取图片标题和图片真实的url
- 下载图片,并保存到MongoDB
- 请求图片详情页出错,返回“盗链”的图片提示,修改header并传入正确的Referer解决
- 图片标题带?,使用replace方法替换,否则无法创建目录
- 多线程,当前是单线程采集,速度很慢
- 爬取手机界面的所有手机评论列表
- 存储到MONGODB
- 获取首页的手机列表,并获取各个手机标题和详情页的URL
- 把第1步获取的详情页URL分别打开,并获取产品ID
- 根据产品ID结合URL,组合出评论页的JSON请求并获取JSON数据
- 首页的JSON数据中包含最大的评论页数
- 使用最大评论页数作为循环,获取得到所有页的评论
- 返回的JSON数据包含一些乱七八糟的开头,不能使用json.loads()方法生成字典
- 有时候请求评论页JSON会出现乱码
- 暂时想不到多线程在哪里使用合适
- 使用json.loads()方法
- 使用多线程
- 根据登陆后的cookie制作header,请求搜索微信文章
- url需要使用urlencode拼接
- 使用代理避免IP被封
- 使用pyquery解析得到需要的字段信息
- 爬取文章详情页并存储到MongoDB
- 制作cookie,拼接URL
- 获取每一页的html代码
- 从每一页的html代码解析得到具体文章的url
- 获取具体文章的url,解析得到需要的信息
- 使用pyquery
- 使用代理IP
- 异常处理
待补充
待补充
待补充
待补充
待补充
待补充