首先感谢@riwfhiu 老哥给的爬虫框架
首先伪装访问请求头:
这是内网的地址,不知道能不能写一段代码在爬数据之前先自动连接VPN。
然后定位要爬取数据:
接下来就是根据老哥的框架,抄作业了
[Python] 纯文本查看 复制代码
import requests,json
from lxml import etree
# =====================================请求区==========================================#
# get模式,获取网页源码,传入参数:url(字符串)
def gethtml(url):
# 伪装头文件,F12打开浏览器,刷新一次:Network > 选目标链接(默认第一个) > Headers
headers = {
# User-Agent 浏览器标识头,爬虫必备,最好带上。
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
"Cookie": "semester.id=382; JSESSIONID=2F6A26DDD9116DDEB7185FDE50453636", # cookie相当于临时登陆凭证,作用跟账号密码一样,有效期由网站决定,几天到几月不等。带cookies伪装表示已登陆状态。
"Referer": "http://192.168.0.88", # Referer表示来源地址,有些网站会检测跨域访问,不合法会拒绝。
# 剩下其它的一些伪装如果能正常访问可以不添加,不能就加上吧
# "Upgrade-Insecure-Requests": "1", #比如这个属性是百度网址的,其它网址可能有其它属性值
}
r = requests.get(url, headers=headers) # 正式get请求
if r.status_code != 200: # 状态码判断返回是否成功,不成功则报错退出
print("获取url:%s失败!" % (url))
exit()
return r # 直接返回r,为什么不直接返回r.text(文本),因为图片/视频格式是r.content(用二进制写入)
# =====================================解析区==========================================#
# xpath解析接口,输入:xpath格式字符串'//div[id="lg"]/img[@id="s_lg_img_new"]' 注意外面一层是单引号,返回值为list,元素为字符串
# 我个人推荐xpath,轻巧强大好用,浏览器自带解析路径,不会写的直接无脑copy,右键元素 > Copy > CopyXpath,复制字符串传入参数即可
# xpath字符串通用写法://标签[@属性="属性值"]/下一级标签[@属性="属性值"]/text() 取出文本 /@src取出src地址
# 例子://div[@class="text-content"]/a[2]/@href #取出div下的第2个a的href属性值。
def getxpath(r, str):
html = etree.HTML(r.text)
reslist = html.xpath(str)
return reslist
# =====================================保存区==========================================#
# 爬虫目的一般为获取文本/图片/视频等数据,一般要保存下来慢慢看
# 文本写入txt,传入参数:txtpath路径,data数据
def writetxt(txtpath, data_str): # 文本的名字和路径,也可以使用绝对路径,例如 "D:\\爬虫学习\\采集文本.txt"
with open(txtpath, "w") as f:
f.write(str(data_str))
# 图片写入jpg/png,传入参数:imgpath路径,content二进制数据
def writeimg(imgpath, content): # 图片的名字和路径
with open(imgpath, "wb") as f:
f.write(content)
# ================以上三大块就是通用爬虫模板,下面是自己写的想实现的功能====================#
# 获取成绩,并写入txt中
def get_news_txt():
# 第一步:请求网址先获取html
url = "http://192.168.0.88/eams/teach/grade/course/person!search.action?semesterId=382&projectType=&_=1610787238866"
r = gethtml(url)
title_xpath='//*[@id="grid3700032241"]/thead/tr/th/text()' #th没有选中具体值,返回所有匹配的值
title_list=getxpath(r,title_xpath) #传入r页面源码
title_str=""
for one in title_list:
print(one)
title_str+=str(one)+" "
with open("成绩.txt",'a') as txt:
a=txt.write(title_str)
a=txt.write("\n")
print(str(title_str))
print("恭喜你写入了一个爬虫数据!快打开文件看看吧")
title_xpath = '//*[@id="grid3700032241_data"]/tr/td/text()' # th没有选中具体值,返回所有匹配的值
title_list = getxpath(r, title_xpath) # 传入r页面源码
title_str = ""
for one in title_list:
print(one)
title_str += str(one) + " "
with open("成绩.txt", 'a') as txt:
a = txt.write(title_str)
print(str(title_str))
get_news_txt()
爬取成功
不知道为什么这里自动换行了,如果写入CSV文件会不会就有格式了?
实在惭愧,搞了一个来小时才搞好。
在学校学了一学期的Python,老师就讲了点基础的东西,希望下学期上这个老师的电子商务推荐系统能学到更多东西吧!
最后再次感谢@riwfhiu !!!
终于感受到Pyhthon的一点用途了。。。。。
|