爬虫,即网络爬虫,可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来
使用正则表达式爬取数据
利用正则表达式爬取数据
re.match(pattern, string[, flags])
re.search(pattern, string[, flags])
re.split(pattern, string[, maxsplit])
re.findall(pattern, string[, flags])
re.finditer(pattern, string[, flags])
re.sub(pattern, repl, string[, count])
re.subn(pattern, repl, string[, count])
re.compile(string[,flag])
. 匹配除换行符"\n"外的字符
+ 匹配前一个字符1次或无限次
?匹配前一个字符0次或1次
\d 数字
\s 空白字符
\w 数字和字母
大写的话就是”非”
获取网页源码
所需模块
import urllib.request
import re
把要执行的程序伪装成浏览器
headers = {
"User-Agent": "Mozilla/5.0(Windows NT 10.0;WOW64;rv:50.0) AppleWebKit/537.36 (KHTML, like Gecko) Gecko/20100101 Firefox/50.0 Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3",
'Connection': 'keep-alive'}
获取要爬的网址打开读取
response = urllib.request.urlopen("http://www.baidu.com",headers=headers).read()
给爬下来的源码解码
response=response.decode('utf-8')
获取源码里想要的内容
pattern = re.compile(r'\d+')
concent=re.findall(pattern, 'one11two2three3four4')
requests是Python的一个HTTP客户端库,跟urllib类似, python的标准库urllib提供了大部分需要的HTTP功能,但是一个简单 的功能就需要一大堆代码。
不需要解码、代码少
r.url -获取url地址
r.text -获取响应内容
r.content -获取响应内容
r.encoding -获取或设置网页编码
都会自动内容转码,如果有乱码就用r.content
简介
BeautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修 改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因 为简单,所以不需要多少代码就可以写出一个完整的应用程序。
BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
BeautifulSoup已成为和lxml、html6lib一样出色的python解释器,为用户 灵活地提供不同的解析策略或强劲的速度。
查找
find
查找给定第一个标签
find_all
查找给定的所有标签
常用方法
.contents .children属性 -直接子节点(儿子)
.descendants属性 -所有子孙节点(所有后代)
.string属性 -获取文本
.parent .parents -父节点
.next_sibling .previous_sibling -兄弟节点
.prettify()
让源码好看点。
.getText()
获取标签内容
所需模块
import requests
r = requests.get("http://www.baidu.com",headers={'User-Agent': 'Mozilla/4.0'})
soup = BeautifulSoup(r.text,"html.parser")
html.parser:解析器
爬取源码里需要的内容
li=soup.find_all("li")
网页里所有的li标签
返回的是列表,利用循环遍历将每个li标签.getText()(获取内容)