动态网页抓取(soup搜索节点操作删除节点的一种好的方法(上))
优采云 发布时间: 2021-11-19 01:18动态网页抓取(soup搜索节点操作删除节点的一种好的方法(上))
前言:本文主要介绍页面加载后如何通过JS抓取需要加载的数据和图片
本文在python+chrome(谷歌浏览器)+chromedrive(谷歌浏览器驱动)中使用selenium(pyhton包)
推荐Chrome和Chromdrive下载最新版本(参考地址:)
它还支持无头模式(无需打开浏览器)
直接上传代码:site_url:要爬取的地址,CHROME_DRIVER_PATH:chromedrive存储地址
1 def get_dynamic_html(site_url):
2 print('开始加载',site_url,'动态页面')
3 chrome_options = webdriver.ChromeOptions()
4 #ban sandbox
5 chrome_options.add_argument('--no-sandbox')
6 chrome_options.add_argument('--disable-dev-shm-usage')
7 #use headless,无头模式
8 chrome_options.add_argument('--headless')
9 chrome_options.add_argument('--disable-gpu')
10 chrome_options.add_argument('--ignore-ssl-errors')
11 driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH,chrome_options=chrome_options)
12 #print('dynamic laod web is', site_url)
13 driver.set_page_load_timeout(100)
14 #driver.set_script_timeout(100)
15 try:
16 driver.get(site_url)
17 except Exception as e:
18 #driver.execute_script('window.stop()') # 超出时间则不加载
19 print(e, 'dynamic web load timeout')
20 data = driver.page_source
21 soup = BeautifulSoup(data, 'html.parser')
22 try:
23 driver.quit()
24 except:
25 pass
26 return soup
一个返回的soup,方便你搜索这个soup的节点,使用select、search、find等方法找到你想要的节点或者数据
同样,如果您想将其下载为文本,则
1 try:
2 with open(xxx.html, 'w+', encoding="utf-8") as f:
3 #print ('html content is:',content)
4 f.write(get_dynamic_html('https://xxx.com').prettify())
5 f.close()
6 except Exception as e:
7 print(e)
下面详细说一下,beautifusoup的搜索
如何先定位标签
1.使用find(本博主详细介绍)
2.使用选择
通过标签名、类名、id 类似jquery来选择soup.select('p .link #link1')这样的选择器。
按属性搜索,如href、title、link等属性,如soup.select('p a[href=""]')
这里匹配的是最小的,他的上级是
接下来说说节点的操作
删除节点 tag.decompose()
在指定位置插入子节点tag.insert(0,chlid_tag)
最后,beautifusoup 是过滤元素的好方法。在下一篇文章中,我们将介绍正则表达式匹配和过滤。爬虫内容