爬虫三步骤:
#第一步:拿到页面源代码
#第二步:通过xpath或json提取有效信息
#第三步:对数据进行保存
新版浏览器F12键,可以查看网页开发人员信息,进行分析。
页面源代码,有三种,一种是静态可以直接获取,一种是Ajax获取,一种需要登录获取。
不管是哪一种,都需要用到request库获取相应的网页代码信息。
静态网页一般可以使用get+xpath分析网页信息获得数据。
动态一般用get或post,需要在F12工具中找到 网络--XHR信息 ,返回数据是都为JSON格式。
分享代码静态获取,B站学习链接 https://www.bilibili.com/video/BV1nV41147J1 (暮光微晓破倾城)
import requests
from lxml import etree
import time
#网页链接
url="https://movie.douban.com/top250"
#网页表头
headers= {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"
}
#返回网页信息
resp= requests.get(url,headers=headers).text
#print(resp)
#使用xpath对数据进行处理
html=etree.HTML(resp)
lis=html.xpath("/html/body/div[3]/div[1]/div/div[1]/ol/li")
for li in lis:
title=li.xpath("./div/div[2]/div[1]/a/span[1]/text()")[0]
href=li.xpath("./div/div[2]/div[1]/a/@href")[0]
pf=li.xpath("./div/div[2]/div[2]/div/span[2]/text()")[0]
year=li.xpath("./div/div[2]/div[2]/p[1]/text()[2]")[0].strip().split("/")[0]
diqu=li.xpath("./div/div[2]/div[2]/p[1]/text()[2]")[0].strip().split("/")[1]
time.sleep(0.5)
print(title,pf,year,diqu,href)
with open(r"dd.txt","a",encoding="utf-8") as f:
f.write("{},{},{},{},{}".format(title,pf,diqu,year,href))
f.write("\n")
print("下载")
分享代码动态获取(get 方式),B站学习链接
from urllib.request import Request,urlopen
import requests
from lxml import etree
import time
import json
#获取网页链接
url="https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit={}&page_start={}"
#网页表头
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
for i in range(3):
newurl=url.format(i*20,(i+1)*20)
print(newurl)
#获取网页返回值
req=requests.get(newurl,headers=headers).text
#json数据
data=json.loads(req)
for s in data["subjects"]:
print(s["title"])
time.sleep(1)
部分连接地址中文部分【需要字符串切片】需要转码再合并url。代码如下
#网页链接
s_url=u"http://1*2.15.***.219:8028/ictedu/download.php?fname=./"
import urllib
st = u'download.php?fname=./随机事件的概率探究.zip'[21:]
print(st)
st = st.encode('GBK')
s = parse.quote(st)
print(s_url+s)