python爬取动态网页-动态网页爬取pdf
发布时间:2023-02-09 14:06 浏览次数:次 作者:佚名
<button class="Button QuestionMainAction"
type="button">查看更多回答</button>
经过
driver.find_element_by_css_selector('button.QuestionMainAction').click()
选择并单击此按钮。
3.HTML文件结构
构造并保存html文件,解析并存储原始页面的html
html通过prettify()结构化python爬取动态网页,然后存储在本地的txt文件中。
4.保存并下载图片
注意,我们的目的是爬取答案下的图片,其他的不需要。
还是右键查看,可以找到每张图片上的节点,没错,里面有图片的高清网址和缩略图网址。
每个元素都由 html 实体编码python爬取动态网页,因此我们必须按如下方式对其进行解码。
html.parser.unescape
然后您可以保存图像 URL。
最后下载镜像。
urllib.request.urlretrieve
5.结果展示
[外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-8DFggSLg-1538729559650)()]
6.代码
from selenium import webdriver
import time
import urllib.request
from bs4 import BeautifulSoup
import html.parser
def main():
driver = webdriver.Chrome() # 打开浏览器
driver.get("https://www.zhihu.com/question/40273344") # 打开想要爬取的知乎页面
# 模拟用户操作
def execute_times(times):
for i in range(times):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
try:
driver.find_element_by_css_selector('button.QuestionMainAction').click()
print("page" + str(i))
time.sleep(1)
except:
break
execute_times(5)
result_raw = driver.page_source # 这是原网页 HTML 信息
result_soup = BeautifulSoup(result_raw, 'html.parser')# 然后将其解析
result_bf = result_soup.prettify() # 结构化原 HTML 文件
with open("./output/rawfile/raw_result.txt", 'w',encoding="utf-8") as girls: # 存储路径里的文件夹需要事先创建。
girls.write(result_bf)
girls.close()
print("爬取回答页面成功!!!")
with open("./output/rawfile/noscript_meta.txt", 'wb') as noscript_meta:
noscript_nodes = result_soup.find_all('noscript') # 找到所有
noscript_inner_all = ""
for noscript in noscript_nodes:
noscript_inner = noscript.get_text() # 获取
noscript_inner_all += noscript_inner + "\n"
noscript_all = html.parser.unescape(noscript_inner_all).encode('utf-8') # 将内部内容转码并存储
noscript_meta.write(noscript_all)
noscript_meta.close()
print("爬取noscript标签成功!!!")
img_soup = BeautifulSoup(noscript_all, 'html.parser')
img_nodes = img_soup.find_all('img')
with open("./output/rawfile/img_meta.txt", 'w') as img_meta:
count = 0
for img in img_nodes:
if img.get('src') is not None:
img_url = img.get('src')
line = str(count) + "\t" + img_url + "\n"
img_meta.write(line)
urllib.request.urlretrieve(img_url, "./output/image/" + str(count) + ".jpg") # 一个一个下载图片
count += 1
img_meta.close()
print("图片下载成功")
if __name__ == '__main__':
main()