代码整体写的很烂,就是练手写着玩的,自己也是新手,记录一下,方便以后用的时候找出来瞅瞅
首先下载需要的库,可以命令行下载也可以pycharm下载
下载完成后倒入
import requests
import sys
import re
import time
from bs4 import BeautifulSoup
import Settting
import xlwt
因为后面涉及到字符串选取和将最后数据保存到Excel所以需要额外倒入了xlwt
初始化几个需要用到的列表,后面筛选过后的数据直接存到这些列表里面
headers的作用是伪装浏览器
#初始化列表,存数据
All_info_list = []
img_list = []
name_list = []
Downurl_list = []
#加入请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"
}
#获取网页数据
def get_html(url):
request = requests.get(url,headers = headers)
request.encoding = "gbk2312"
Content = request.text
return Content
这里是根据输入的url链接,然后会返回网页源代码给我们,因为可能中文会显示乱码的问题,写了
request.encoding = "gbk2312"
然后return返回内容
def Start(url):
NeiRong = get_html(url)
soup = BeautifulSoup(NeiRong,"html.parser")#使用BeautifulSoup库对网页源代码进行结构化,为过滤做好准备
LingShi_img = soup.select('body > div > div > ul > li > a > img')#得到相应网页的图片,返回的是列表
for img in LingShi_img:
img_list.append(img.get("src"))
LinShi_name = soup.select('body > div> div > ul > li > a > h3')#得到相应的名字,返回值列表
for name in LinShi_name:
name_list.append(name.get_text())
ahref_list = soup.select('body > div > div > ul > li > a')#得到一个url,列表
for i in ahref_list:
#为得到播放地址,构造新的url
Nurl = ***************************** 这里没有写链接,实际上就是对上面得到的url做了字符串的拼接
BoFangContent = get_html(Nurl)
soup = BeautifulSoup(BoFangContent, "html.parser") # 使用BeautifulSoup库对网页源代码进行结构化,为过滤做好准备
ScriptText = soup.select('body > div> div > div > ul > script')
ChuBuUrl = re.findall(r"var down_url = '(.+?)';",str(ScriptText[1]))#取出来的列表进行字符串替换,换成我们想要的,作进一步处理
YiShaUrl = str(ChuBuUrl[0]).replace("string1","string2")
Downurl_list.append(YiShaUrl)
time.sleep(3)
这部分代码主要是调用第一个函数返回的内容,对内容进行处理。从内容里面找到我们想要的部分,然后存到列表里面
soup.select方法里面的参数使用浏览器,按发f12然后找到你想要得到的标签部分,右击,选择copy->copy selector
然后复制到代码里就是了,一般使用这个返回的列表可能为空,例如我们拿到的为:
“body > script:nth-child(15)”,这是把把:nth-child(15)去掉,只保留body > script
这样找的范围会大一些。然后根据列表索引值找我们想要的数据
ChuBuUrl = re.findall(r"var down_url = '(.+?)';",str(ScriptText[1]))#取出来的列表进行字符串替换,换成我们想要的,作进一步处理
在后面用到的正则是对标签里的内容想要截取,用的是正则最基本的,复杂的自己也还没搞会,就是直接将自己想要的内容放在括号里面,括号前后输入我们想要筛序的字符串前后的数据,最终就会把我们想要的东西保留下来。返回的也是列表,并且保证第二个参数是字符串。
if __name__ == "__main__":
#构造URL
urls = ["*************************".format(str(i)) for i in range (1,100)]#这里我想要这个url里面前100页数据,自己观察url发现只是改变了其中一个数之,所以构造一下url
pagenum = 0#这个只是爬完一页打印一次,方便观看到进度
for url in urls:
pagenum += 1
print(pagenum)
Start(url)#调用上面的函数
#构建Excel表格
#进行初始化表格的命令
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('Sheet1')
#将表格第一行写下表头
header = ["名称", "图片", "下载链接"]
for h in range(len(header)):
sheet.write(0, h, header[h])
#一开始构造的三个列表在这里添加一下,实际上添加不添加意义不大了
All_info_list.append(name_list)
All_info_list.append(img_list)
All_info_list.append(Downurl_list)
#对我们爬取的内容写到表格里,ww代表列,hh代表行
ww = 0
for Tlist in All_info_list:
hh = 1
for data in Tlist:
sheet.write(hh,ww,data)#将我们的数据data下载了第hh行,第ww列里面
hh += 1
ww += 1
爬取结果就是这样了,因为爬取的是一些是,违规绅士内容,所以打码了,还有就是代码关于链接的也都打****************了,涉及到链接的可私聊我,哈哈233333333333333333333.