爬虫

来源:互联网 发布:城田优 知乎 编辑:程序博客网 时间:2024/04/29 16:18

“巧妇难为无米之炊”,能获得自己想要的数据,才能做出想要的成果。

最近开始学习爬虫,目的:获取新浪微博关键用户发表的所有微博。

幸而有同学相助,给出很多建议。

一、python 模拟登录

使用cookie包

cookie指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密

详细代码:Python模拟新浪微博登录

极客视频讲解爬虫系列(使用了2种模拟登陆方法:1. cookie 2.列表法)

里面有讲到用Fidder获取cookies,而实际上,我们使用下面两个文档中讲到的方法就可以获取了。

相关文档1

相关文档2


a. 新浪微博,手机端比PC端的数据更干净,更容易获取~手机:weibo.cn (PC:weibo.com)

b. 安装requests包时,遇到问题:

pip install requests

 ,及在pycharm ->setting->Project里按“+”键出问题,

解决方法:

自行下载requests包,解压缩到D:\Python27\Lib\site-packages ,然后运行python setup.py install

c. from lxml import etree 失败,pip网站又登录不上去,于是从师弟那儿拷贝全部的包。解决方法:

先安装了一个VCForPython27.msi

再更改路径。


二. 翻页功能

需修改:backurl,action


三. etree.HTML编码出现问题

解决方案


四. XPath(另一种:正则表达式)

在使用etree.HTML后,需要用XPath对爬取到的内容进行解析。

又一次,选择极客学院

XPath 与多线程爬虫


4.1 定义

XPath : XML的路径语言,用来确定XML确定位置内容的语言。

or: 一门语言/在XML文档中查找信息/支持HTML/通过元素和属性进行导航


4.2 使用

将网页源代码转换成可以被XPath识别的码:

<span style="font-size:18px;">Selector = etree.HTML(网页源代码)</span>

提取感兴趣的

Selector.xpath(一段神奇的符号)


4.3 结构

HTML结构:树状结构/逐层展开/逐层定位/寻找独立节点

可“右击-> 查看源代码”


4.4 具体使用

获取:

方法1. 手动分析: html->body->div->ul[@useful]->li

方法2. Chrome自动生成:

在代码上右击copy

“//”:如果该元素是唯一的,比如海淀,就只要//,如果有多个地方,比如肯德基,那就要再确定上一层

"//": 定位根节点

"/": 往下层寻找

/text(): 提取文本内容

/@***: 提取属性内容


eg: 

'//ul[@id="useful"]/li/text()':提取ID为useful的文本内容

'//ul/li/text()':提取所有ID的文本内容

‘//div[@id="url"]/a/@href’: 提取a标签下的链接

‘//a/@title’: 提取a标签下的文本信息


4.5 特殊用法

a. 以相同字符开头

eg: 

<div id="test1">...</div>
<div id="test2">...</div>

解决:

'//div/[start-with(@id,"test")/text()]' 提取 div 标签下 id 为test开头的文本

b. 标签套标签,提取一整句话string(.)

eg: 

<div id="test1">转发,

<font color = red> 转发内容</font>

</div>

解决:

类似与正则,先大后小

data = selector.xpath('//div[@id="test3"]')[0]info = data.xpath('string(.)')content_2 = info.replace('\n','').replace(' ','')print content_2

五 Python 并行化:map内置函数

from multiprocessing.dummy import Poolpool = Pool(4)#表明4核,4个线程
results = pool.map(爬取函数,网址列表)

如果HTML中有JSON源代码,则import json来解析这些代码

另:编码错误时,可以使用下面方法

import sysreload(sys)sys.setdefaultencoding('utf-8')


顺带:pyCharm 注释快捷键 command + /


别人写的好爬虫代码

点击打开链接



0 0
原创粉丝点击