python怎么通过父页面爬取子页面的数据再返回父页面 爬虫爬取iframe

您所在的位置:网站首页 如何取iframe页面的数据 python怎么通过父页面爬取子页面的数据再返回父页面 爬虫爬取iframe

python怎么通过父页面爬取子页面的数据再返回父页面 爬虫爬取iframe

2024-07-17 02:31| 来源: 网络整理| 查看: 265

在爬取网站的数据时,遇到数据通过iframe脚本加载,如何抓取到此数据。可以通过以下方法抓取在iframe中加载的数据:

1.查看iframe的src属性,获取到它指向的页面地址。 2,使用Selenium模块打开此地址,然后查找iframe元素并切换到iframe上下文中,再次使用Selenium模块查找相应的数据元素,并利用xpath等方式进行解析。

而此代码针对第一种方式进行讲解。 首先需要导入一些库,可以自行搜索如何导入:

import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent from urllib.parse import urljoin import re

get_page函数用于下载指定URL的网页内容,并返回其HTML代码。 在这个函数中,我们使用requests库向指定URL发送HTTP请求,通过判断响应状态码是否为200来检查是否成功获取到了网页。

def get_page(url): headers = {'User-Agent': UserAgent().random} resp = requests.get(url, headers=headers) if resp.status_code == 200: resp.encoding = resp.apparent_encoding return resp.text else: return None

get_links函数用于从网页HTML代码中提取所有iframe标签的src属性值,并将它们拼接成完整的URL链接。 在这里,我们使用BeautifulSoup库解析HTML代码,然后从中查找所有iframe标签,使用get方法获取每个标签的src属性值,并将其与原始页面URL拼接为完整的链接,最后返回所有链接列表。

def get_links(page_url, soup): links = [] iframe_tags = soup.find_all('iframe') for iframe_tag in iframe_tags: link = iframe_tag.get('src', '') if link: full_url = urljoin(page_url, link) links.append(full_url) return links

get_beianhao函数用于从给定的URL链接中获取备案号信息。 在这里,我们首先调用get_page方法获取给定URL对应的HTML代码, 然后使用正则表达式从HTML代码中查找备案号信息. 这个为想获取一个网站的备案号写的,如果想找别的,直接修改正则表达式即可

def get_beianhao(url): headers = {'User-Agent': UserAgent().random} html = get_page(url) if html: try: compile_rule = re.compile(r'(ICP证[\d]+|[\u4e00-\u9fa5]?ICP备[\d]+)', re.I) beianhao = re.findall(compile_rule, html)[0] return beianhao except IndexError: pass else: print(f"获取网页 {url} 失败")

main函数是程序的主要逻辑,它首先使用get_page函数获取起始页面HTML代码, 然后使用get_links函数从起始页面中提取所有的iframe链接,并依次使用get_beianhao函数获取每个链接中的(通过正则表达式想获取)信息, 最后输出可找到此iframe的链接及其对应的(通过正则表达式想获取)信息。如果无法获取或者获取网页失败,会在控制台输出提示信息。

def main(): start_url = 'http://www.hngy.gov.cn/' html = get_page(start_url) if html: soup = BeautifulSoup(html, 'lxml') links = get_links(start_url, soup) for link in links: beianhao = get_beianhao(link) if beianhao: cleared_str = link.replace(start_url, "") print(f"ICP备案链接: {cleared_str} 其备案号为: {beianhao}") else: pass else: print(f"获取网页 {start_url} 失败")

最后看完整代码:

import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent from urllib.parse import urljoin import re #get_page函数用于下载指定URL的网页内容,并返回其HTML代码。 # 在这个函数中,我们使用requests库向指定URL发送HTTP请求,通过判断响应状态码是否为200来检查是否成功获取到了网页。 def get_page(url): headers = {'User-Agent': UserAgent().random} resp = requests.get(url, headers=headers) if resp.status_code == 200: resp.encoding = resp.apparent_encoding return resp.text else: return None # get_links函数用于从网页HTML代码中提取所有iframe标签的src属性值,并将它们拼接成完整的URL链接。 # 在这里,我们使用BeautifulSoup库解析HTML代码,然后从中查找所有iframe标签,使用get方法获取每个标签的src属性值, # 并将其与原始页面URL拼接为完整的链接,最后返回所有链接列表。 def get_links(page_url, soup): links = [] iframe_tags = soup.find_all('iframe') for iframe_tag in iframe_tags: link = iframe_tag.get('src', '') if link: full_url = urljoin(page_url, link) links.append(full_url) return links # get_beianhao函数用于从给定的URL链接中获取信息。 # 在这里,我们首先调用get_page方法获取给定URL对应的HTML代码, # 然后使用正则表达式从HTML代码中查找信息. def get_beianhao(url): headers = {'User-Agent': UserAgent().random} html = get_page(url) if html: try: compile_rule = re.compile(r'(ICP证[\d]+|[\u4e00-\u9fa5]?ICP备[\d]+)', re.I) beianhao = re.findall(compile_rule, html)[0] return beianhao except IndexError: pass else: print(f"获取网页 {url} 失败") # main函数是程序的主要逻辑,它首先使用get_page函数获取起始页面HTML代码, # 然后使用get_links函数从起始页面中提取所有的iframe链接,并依次使用get_beianhao函数获取每个链接中的备案号信息, # 最后输出可找到备案号的链接及其对应的备案号信息。如果无法获取备案号或者获取网页失败,会在控制台输出提示信息。 def main(): start_url = ' '#输入自己想爬取的url html = get_page(start_url) if html: soup = BeautifulSoup(html, 'lxml') links = get_links(start_url, soup) for link in links: beianhao = get_beianhao(link) if beianhao: cleared_str = link.replace(start_url, "") print(f"链接: {cleared_str} 其内容为: {beianhao}") else: pass else: print(f"获取网页 {start_url} 失败") if __name__ == '__main__': main()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3