一定要看注释!一定要看注释!一定要看注释!
傻瓜级爬虫代码块,改改参数就搞定,参数变量中输入网址,直接运行就可以出结果。
自由组合各代码块,如果需要文本格式化,则需要多次使用changeTxt函数,直到全部改好为止;
看清注释,简单易懂;需要那块拿哪块,记得添加必要的import句段,下载好需要的包。
注意:由于re.compile部分参数变量代码不方便使用形参,下载图片的代码块需要读者自己编写正则表达式部分代码。
import urllib.request
import urllib.response
from bs4 import BeautifulSoup
import re
#获取特定页面全部内容
def getPointResult(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.39 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.39'
}
req = urllib.request.Request(url=url, headers=headers, method="GET")
response = urllib.request.urlopen(req, timeout=20)
html = response.read().decode("UTF-8")
return html
#创建文件,用于存储该网页内容(需要配合getPointResult使用)
def text_create(name1,name2,url):
desktop_path = "resFolder/" # 新创建的txt文件的存放路径
full_path1 = desktop_path + name1 + '.html' # 也可以创建一个.doc的word文档
full_path2 = desktop_path + name2 + '.html'
file1 = open(full_path1, 'w', encoding="UTF-8")
file2 = open(full_path2, 'w', encoding="UTF-8")
file1.write(getPointResult(url))
file1.close()
#对索获取页面内容进行文本格式化,两个name分别对应原始文件和格式化后的文件,当有多套文本需要被替换时可以多次使用
def changeTxt(name1,name2,filepath,orign_rep,after_rep):
infile = open(filepath+"/"+name1+".html", "r", encoding="UTF-8") # 打开文件
outfile = open(filepath+"/"+name2+".html", "w", encoding="UTF-8") # 内容输出
for line in infile: # 按行读文件,可避免文件过大,内存消耗
outfile.write(line.replace(orign_rep, after_rep)) # first is old ,second is new
infile.close() # 文件关闭
outfile.close()
#==============================================================================================
#文件相对路径示例:resFolder/res.html,胥要获取的类型,其他需要添加的内容,例如class_
def urlImgout(file_fullpath,type,other):
file = open(file_fullpath, "r+", encoding="UTF-8")
html = file.read()
bs = BeautifulSoup(html, "html.parser")
bs1 = bs.find_all(type, class_=other)
return bs1
#对urlTypeout中的内容进行简化,
def getFinurl():
findLink = re.compile(r'<img alt="" class="attachment-thumbnail size-thumbnail" height="180" loading="lazy" src="(.*?)" width="285"/>')
for item in urlImgout():
item = str(urlImgout())
link = re.findall(findLink, item)
return link
#保存图片,相对于本py文件来说相对应的图片需要被保存的地址,示例:resFolder/img[以数字递增作为文件名保存图片]
def savePics(filepath,set_timeout):
import requests
for i in range(0,len(getFinurl())):
r = requests.get(getFinurl()[i],timeout=set_timeout)
file_name = str(i)+'.jpg'
with open(filepath+'/'+file_name, 'wb') as f:
f.write(r.content)
f.close()
|