❶ python 如何抓取动态页面内容
下面开始说一下本文抓取动态页面数据的相关工具和库:
1. python 2.7
2. pyqt
3. spynner (在安装过程中,其他的一些依赖库也会自动上网下载安装)
4. BeautifulSoup
5. ide工具是pycharm(当然这个只是个人喜好,也可以使用其他的ide工具)
以上几个工具都可以网络找到,python现在出了3.x版本的,但是由于众多第三方库或架构都没有兼容,并且后续要使用到的爬虫框架scrapy也是没有支持3.x版本,因此还是建议使用2.7版本吧。
spynner和BeautifulSoup下载后,都可以cd到解压出来的目录,然后使用python setup.py install来完成安装,需要注意的是spynner依赖pyqt,所以一定要安装pyqt,否则无法使用spynner。
下面使用一个具体是例子来说明一下spynner和BeautifulSoup的使用,我们就以爬取京东页面上的一些产品数据来说明如何爬取动态页面数据(当然,如果我们过于频繁的爬京东,估计还是有可能被京东将我们ip拉黑的)。
❷ python怎么获取动态网页链接
四中方法:
'''
得到当前页面所有连接
'''
import requests
import re
from bs4 import BeautifulSoup
from lxml import etree
from selenium import webdriver
url = 'http://www.ok226.com'
r = requests.get(url)
r.encoding = 'gb2312'
# 利用 re
matchs = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')" , r.text)
for link in matchs:
print(link)
print()
# 利用 BeautifulSoup4 (DOM树)
soup = BeautifulSoup(r.text,'lxml')
for a in soup.find_all('a'):
link = a['href']
print(link)
print()
# 利用 lxml.etree (XPath)
tree = etree.HTML(r.text)
for link in tree.xpath("//@href"):
print(link)
print()
# 利用selenium(要开浏览器!)
driver = webdriver.Firefox()
driver.get(url)
for link in driver.find_elements_by_tag_name("a"):
print(link.get_attribute("href"))
driver.close()
❸ 如何用python+selenium+phantomjs获得一个网页的动态生成的html代码
一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览器PhantomJS来抓取javascript渲染的页面,下面实现一个简单的爬取
环境搭建
准备工具:python3.5,selenium,phantomjs
我的电脑里面已经装好了python3.5
安装Selenium
1pip3 install selenium安装Phantomjs
按照系统环境下载phantomjs,下载完成之后,将phantomjs.exe解压到python的script文件夹下
使用selenium+phantomjs实现简单爬虫
123456789fromselenium import webdriverdriver = webdriver.PhantomJS()driver.get('http.com') #加载网页data = driver.page_source #获取网页文本driver.save_screenshot('1.png') #截图保存print(data)driver.quit()selenium+phantomjs的一些使用方法
设置请求头里的user-Agent
123456789101112fromselenium import webdriverfromselenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragentdcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息driver.get('h.com') #加载网页data = driver.page_source #获取网页文本driver.save_screenshot('1.png') #截图保存print(data)driver.quit()请求超时设置
webdriver类中有三个和时间相关的方法:
1.pageLoadTimeout 设置页面完全加载的超时时间,完全加载即完全渲染完成,同步和异步脚本都执行完
2.setScriptTimeout 设置异步脚本的超时时间
3.implicitlyWait 识别对象的智能等待时间
1234567fromselenium import webdriverdriver = webdriver.PhantomJS()driver.set_page_load_timeout(5) #设置超时时间driver.get('htt.com')print(driver.title)driver.quit()设置浏览器窗口大小
调用启动的浏览器不是全屏的,有时候会影响我们的某些操作,所以我们可以设置全屏
12driver.maximize_window() #设置全屏driver.set_window_size('480','800') #设置浏览器宽480,高800元素定位
import webdriverdriver = webdriver.PhantomJS()driver.set_page_load_timeout(5)driver.get('i.com')try:driver.get('.com')driver.find_element_by_id('kw') # 通过ID定位driver.find_element_by_class_name('s_ipt') # 通过class属性定位driver.find_element_by_name('wd') # 通过标签name属性定位driver.find_element_by_tag_name('input') # 通过标签属性定位driver.find_element_by_css_selector('#kw') # 通过css方式定位driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位driver.find_element_by_link_text("贴吧") # 通过xpath方式定位print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型except Exceptionase:print(e)driver.quit()操作浏览器前进或后退
import webdriverdriver = webdriver.PhantomJS()try:driver.get('httai.com') #访问网络首页driver.save_screenshot('1.png')driver.get('ht.sina.com.cn') #访问新浪首页driver.save_screenshot('2.png')driver.back() #回退到网络首页driver.save_screenshot('3.png')driver.forward() #前进到新浪首页driver.save_screenshot('4.png')except Exceptionase:print(e)driver.quit()好文要顶关注我收藏该文
❹ Python爬取动态生成的网页(框架)需要具备哪些知识或者使用哪些库
1、抓取网页,模拟登陆等背后的通用的逻辑和原理;
2、以提取songtaste网页中标题为例,详解如何抓取网站并提取网页内容;
3、以模拟登陆网络为例,详解如何模拟登陆网站;
4、以抓取网易博客帖子中的最近读者信息为例,详解如何抓取动态网页中的内容;
5、详解了在模拟登陆和抓取动态网页过程中,如何用对应的网页分析工具,如IE9的F12,Chrome的Ctrl+Shift+J,Firefox的Firebug,去分析出对应的逻辑;
6、针对抓取网站,模拟登陆,抓取动态网页,全部给出了完整的可用的,多种语言的示例代码:Python,C#,Java,Go等。
❺ python爬虫怎么获取动态的网页源码
一个月前实习导师布置任务说通过网络爬虫获取深圳市气象局发布的降雨数据,网页如下:
心想,爬虫不太难的,当年跟zjb爬煎蛋网无(mei)聊(zi)图的时候,多么清高。由于接受任务后的一个月考试加作业一大堆,导师也不催,自己也不急。
但是,导师等我一个月都得让我来写意味着这东西得有多难吧。。。今天打开一看的确是这样。网站是基于Ajax写的,数据动态获取,所以无法通过下载源代码然后解析获得。
从某不良少年写的抓取淘宝mm的例子中收到启发,对于这样的情况,一般可以同构自己搭建浏览器实现。phantomJs,CasperJS都是不错的选择。
导师的要求是获取过去一年内深圳每个区每个站点每小时的降雨量,执行该操作需要通过如上图中的历史查询实现,即通过一个时间来查询,而这个时间存放在一个hidden类型的input标签里,当然可以通过js语句将其改为text类型,然后执行send_keys之类的操作。然而,我失败了。时间可以修改设置,可是结果如下图。
为此,仅抓取实时数据。选取python的selenium,模拟搭建浏览器,模拟人为的点击等操作实现数据生成和获取。selenium的一大优点就是能获取网页渲染后的源代码,即执行操作后的源代码。普通的通过 url解析网页的方式只能获取给定的数据,不能实现与用户之间的交互。selenium通过获取渲染后的网页源码,并通过丰富的查找工具,个人认为最好用的就是find_element_by_xpath("xxx"),通过该方式查找到元素后可执行点击、输入等事件,进而向服务器发出请求,获取所需的数据。
[python]view plain
#coding=utf-8
fromtestStringimport*
fromseleniumimportwebdriver
importstring
importos
fromselenium.webdriver.common.keysimportKeys
importtime
importsys
default_encoding='utf-8'
ifsys.getdefaultencoding()!=default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
district_navs=['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']
district_names=['福田区','罗湖区','南山区','盐田区','宝安区','龙岗区','光明新区','坪山新区','龙华新区','大鹏新区']
flag=1
while(flag>0):
driver=webdriver.Chrome()
driver.get("hianCe/")
#选择降雨量
driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()
filename=time.strftime("%Y%m%d%H%M",time.localtime(time.time()))+'.txt'
#创建文件
output_file=open(filename,'w')
#选择行政区
foriinrange(len(district_navs)):
driver.find_element_by_xpath("//div[@id='"+district_navs[i]+"']").click()
#printdriver.page_source
timeElem=driver.find_element_by_id("time_shikuang")
#输出时间和站点名
output_file.write(timeElem.text+',')
output_file.write(district_names[i]+',')
elems=driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")
#输出每个站点的数据,格式为:站点名,一小时降雨量,当日累积降雨量
foreleminelems:
output_file.write(AMonitorRecord(elem.get_attribute("title"))+',')
output_file.write(' ')
output_file.close()
driver.close()
time.sleep(3600)
[python]view plain
#Encoding=utf-8
defOnlyCharNum(s,oth=''):
s2=s.lower()
fomart=',.'
forcins2:
ifnotcinfomart:
s=s.replace(c,'')
returns
defAMonitorRecord(str):
str=str.split(":")
returnstr[0]+","+OnlyCharNum(str[1])
❻ 如何用Python爬取动态加载的网页数据
动态网页抓取都是典型的办法
直接查看动态网页的加载规则。如果是ajax,则将ajax请求找出来给python。 如果是js去处后生成的URL。就要阅读JS,搞清楚规则。再让python生成URL。这就是常用办法
办法2,使用python调用webkit内核的,IE内核,或者是firefox内核的浏览器。然后将浏览结果保存下来。通常可以使用浏览器测试框架。它们内置了这些功能
办法3,通过http proxy,抓取内容并进行组装。甚至可以嵌入自己的js脚本进行hook. 这个方法通常用于系统的反向工程软件
❼ python 如何快速找到动态页面的html代码
两个方法:
1.通过抓包工具获取数据发送的地址,发送post请求获取json内容
2.selenium 模拟浏览器访问网站,获取加载后的动态页面html内容
❽ Python爬取动态生成的网页需要具备哪些知识或者使用哪
需要网页编程基础,懂一些简单的ajax,需要会一种网页抓包调试工具。在Mozilla里有一个firebug。 如果有人教你,几天。我遇到一个人,教了她一个星期也没有弄会。 自己摸索有些难。可能也需要一个星期左右时间。