初识爬虫
什么是爬虫
网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略
爬虫可以做什么
你可以爬取需(mei)要(zi)的图片,爬取自己想看的视频等等,只要你能通过浏览器访问的数据都可以通过爬虫获取
爬虫的本质是什么
模拟浏览器打开网页,获取网页中我们想要的那部分数据
准备工作
1、Request
Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后服务器通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项
cmd命令输入:pip install requests引入request
包
2、BeautifulSoup
BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup会帮你节省数小时甚至数天的工作时间
cmd命令输入:pip install beautifulsoup4
引入beautifulsoup4包
通俗一点就是:request就是把网页内容下载到本地,BeautifulSoup用来修改和提取网页所需要的东西
3、找到用户代理
F12找到用户代理,就是什么类型的浏览器
这是爬虫必须要的东西,有了这个可以伪装成浏览器
注:下面框出来的箭头可以帮你快速的找到你想要爬取东西的网页源代码
4、关于编码
在python代码的第一行一般加入#-*- coding: utf-8 -*-或者# coding=utf-8
,可以让代码中出现中文
在编写代码时引入如下的包
from bs4 import Beautiful #网页解析.获取数据
import re #正则表达式.进行文字匹配
import urllib.request,urllib.error #制定URL.获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作
获取数据
python一般使用urllib2库获取页面
1、得到指定一个URL的网页内容
head = { "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"} #模拟浏览器头部信息,向豆瓣服务器发送消息
request = urllib.request.Request(url,headers=head)
html = ""
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
2、解析数据
soup = BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_="item"):
data = []
item = str(item)
link = re.findall(findLink,item)[0]
data.append(link)
imgSrc = re.findall(findImgSrc,item)[0]
data.append(imgSrc)
titles = re.findall(findTitle,item)
if(len(titles) == 2):
ctitle = titles[0]
data.append(ctitle)
otitle = titles[1].replace("/","")
data.append(otitle)
else:
data.append(titles[0])
data.append(' ')
rating = re.findall(findRating,item)[0]
data.append(rating)
judgeNum = re.findall(findJudge,item)[0]
data.append(judgeNum)
inq = re.findall(findInq,item)
if len(inq) != 0:
inq = inq[0].replace("。","")
data.append(inq)
else:
data.append(" ")
bd = re.findall(findBd,item)[0]
bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd)
bd = re.sub('/'," ",bd)
data.append(bd.strip())
datalist.append(data)
代码实现
爬取百度网页中的意见反馈
:
#name : jemo
import requests
from bs4 import BeautifulSoup as bf
from bs4 import BeautifulSoup
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.5211 SLBChan/25"}
accept= "text/plain, */*; q=0.01"
connection= "keep-alive"
cookie="BAIDUID=FDDD0C591E6433F08CFE4F3B85636F32:FG=1; BIDUPSID=FDDD0C591E6433F08FAE1AB316A1F3A9; PSTM=1609153863; BD_UPN=13314752; __yjs_duid=1_d6b87fe1e74104c7fbee4bee3378706b1618623032320; BDUSS=FhHeENyN3VwVDZuTHdsc2t0eEtsaFg5MmNoYWtuSzFnemJRRy1JQm1WaUlUYVpnRVFBQUFBJCQAAAAAAQAAAAEAAABzWIwjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjAfmCIwH5gZ; BA_HECTOR=8l8g052l2ka00gaho91gbehro0r; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; COOKIE_SESSION=6_0_5_6_8_3_0_1_4_3_0_1_1300_0_4_0_1620462201_0_1620462197%7C9%23827_8_1618821454%7C4; H_PS_645EC=d1c5zGqQD%2FI3keFpFBg9ujz4C7iGOaC4%2BB%2FzQXqX6fPZWXXgRp91SA3mWJtWhcJNPVliBwpukt3U; BDRCVFR[-HoWM-pHJEc]=mk3SLVN4HKm; BD_HOME=1; H_PS_PSSID=31660_34004_33675_33607_26350"
url= "https://baidu.com/"
html = requests.get(url=url,headers=headers)
info = bf(html.text,'html.parser')
t=info.select(".text-color")
print(t[4].get_text())
运行截图: