1.re模块(正则表达式)
. :匹配任意字符,换行符除外(\n)
* :匹配前一个字符0次或者无限次
?:匹配前一个字符0次或者一次
.*:贪心算法(尽可能的多)
.*?:非贪心算法(匹配到即可,多次提取)
():括号内的数据作为列表返回
re模块的常用方法findall 、Search、Sub
findall:匹配所有符合规律的内容,返回包含结果的列表
Search:匹配并提取第一个符合规律的字符,返回正则表达式对象
Sub:替换符合规律的内容,返回替换后的值
最主要的一个式子就是(.*?) (re.S)使.能够匹配换行符 \d+ 匹配纯数字
import re
a = 'dasfeffasdasdafefgscdxcasfwefdevasfaqfsdfewgws'
b = re.Search('fa(.*?)cd',a)
print b
首次匹配到fa()cd之间的内容程序结束 如果使用re.findall()这找出所有的符合的文本
2.如何获取网页的源码
2.1第一中就是启动浏览器获取网页的源码并保存在某个txt文本中
2.2就是利用requests模块获取网页的源码
import requests
html = requests.get('http://tieba.baidu.com/python')
html.enconding = 'utf-8'
print html.text
这样就获取了网页的源码并且打印了出来
如何安装requests,模块呢,windowsI下 采用pip install requests 命令就可以自动安装该模块
但是 网页的源码并不是这样好获取的,大多数的服务器都存在反爬虫的功能。所以我门要对自己的爬虫进行伪装,首先我们可以调用浏览器获得请求访问的命令request head
我们创建一个列表
head = {‘User-Agent’:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36’}
html = requests.get('http://www.csdn.net/',headers = head)
html.enconding = 'utf-8'
print html,text
这样就可以通过伪装实现了对网站源码的获取在配合正则表达式就可以简单的怕缺网页上的内容了.下面举一个小例子简单的爬取百度贴吧的图片
import requests
import re
url_ = 'http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search'
head = {'User-Agent':Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}#对我们的爬虫进行伪装
html = requests.get(url,headers=head) #利用requests的get()方法获取源码
html.encoding = 'utf-8'#以utf-8的编码方式显示网页源码
links = re.findall('src="(.*?)">,html.text)#提取我们想要的字符集
for link in links:#利用for循环 将所有的link打印
print link
关于requests模块的2个基本的方法如下,当然也可以咯用help()来查看所有的信息
get:主要是从服务器获取数据
post:向服务器发送数据并获取他的返回
get通过url中的参数来实现的,post通过headers想服务器发送命令
这些主要是应用在单线程爬虫中。
对于多线程爬虫 我们主要使用xpath总之一句话他很简单
xpath存在于lxml库中
pip install lxml
from lxml import etree
selector = etree.HTML(网页源码)
然后
selector.xpath(//)#因为html是树状结构的所以可以用//定位到根节点,/往下寻找,/text()提取文本内容,/@xxx(属性名) 提取属性内容
就可以展现xpath强大的功能(未完待续...)