精华内容
下载资源
问答
  • python爬虫:爬取动态生成的DOM节点渲染数据结果,该方式不是直接拿到接口进行解析,而是XHR中看不到数据,检查网页又能看到,普通爬虫爬取下来的结果是看不到爬取到的这个数据所在的div的。
  • selenium webdriver 爬虫爬取动态网页,里面有chromedriver,windows平台可用,linux需要更换linux的chromedriver。修改代码可爬取其他网站的
  • 用Python爬取由JavaScript生成的动态网页(以英雄联盟皮肤海报为例)
  • 爬取某知名网站图片(爬取动态网页)python爬取动态网页图片欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的...

    爬取某知名网站图片(爬取动态网页)

    python爬取动态网页图片

    环境:
    python3、pycharm
    库:
    requests、urllib、json
    思路:
    1.分析网页构造,找出关键信息
    2.构造正确url抓取网页代码
    3.分析代码格式,找出底层照片标签
    4.根据路径下载图片
    最终效果图这是最终效果图
    在这里插入图片描述 初学爬虫之前爬取的都是静态网页的图片,今天想着爬取动态网站的图片,弄了半天发现关键代码总是爬不到,总显示正在搜索,研究了半天从某大佬那儿找到了思路,发现F12下的XHR有关键内容(正常情况下都是直接从ALL里面找),上图标红线部分是关键信息。在这里插入图片描述在这里插入图片描述以上两张图片是构造url思路,第一张红色部分是每个url都有的,第二张图片是需要构造的GET中的params内容,你会发现每48张图片构成一个XHR,如下图:

    在这里插入图片描述在这里插入图片描述在这里插入图片描述以下图片是代码调试时需要注意的,详情见代码在这里插入图片描述在这里插入图片描述

    #-*-coding:utf-8 -*-
    import requests
    import urllib
    import json
    headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'
    }
    def getDatas(keyword,pages):
        params=[]
        #每滑动48个图片出现一个XHR
        for i in range(48,48*pages+48,48):
            #此处是GET中需要填写的params内容
            params.append({
                'mode': '1',
                'start': i ,
                'xml_len': '48',
                'query': keyword
            })
        #此处url不是真正的网址,而是XHR中headers里的
        url='https://pic.sogou.com/napi/pc/searchList'
        urls=[]
        url2=[]
        for i in params:
            urls.append(requests.get(url, params=i,headers=headers).content.decode('utf-8'))
        for url1 in urls:
            #这样爬取到的内容不是json格式的,需要进行转化(把双引号转为单引号)
            result=json.loads(url1)
            #result为字典,重要信息在‘data’标签下
            url2.append(result['data'])
        #print(url2)
        return url2
    def getImg(datalist,path):
        #x用于存储照片名
        x=0
        for list in datalist:
            #标签items代表的也是一个字典,list2字典下的‘picYUrl'就是要找的照片路径
            if list['items'] != None:
                list1=list['items']
                for list2 in list1:
                    print('正在下载:%s' % list2['picUrl'])
                    try:
                        urllib.request.urlretrieve(list2['picUrl'], path + '%d.jpg' % x)
                        x += 1
                    except:
                        print('图片下载失败')
    
            else:
                print('图片链接不存在')
    
    if __name__ == '__main__':
        datalist=getDatas('张国荣',3)
        getImg(datalist,r'C:\Users\似水流年\Desktop/图片/')
    
    展开全文
  • 如何爬取动态网页信息①

    万次阅读 多人点赞 2018-06-21 00:18:35
    关于静态和动态网页的区别, 小马夫 https://www.cnblogs.com/bluesungz/p/5955170.html 这篇文章已经讲得很清楚了。简单来说,要获取静态网页的网页数据只需要给服务器发送该网页url地址就行,而动态网页的数据因为...

          网页分为静态和动态两种网页。关于静态和动态网页的区别,小马夫https://www.cnblogs.com/bluesungz/p/5955170.html这篇文章已经讲得很清楚了。简单来说,要获取静态网页的网页数据只需要给服务器发送该网页url地址就行,而动态网页的数据因为是存储在后端的数据库里。所以要获取动态网页的网页数据,我们需要向服务器发送请求文件的url地址,而不是该网页的url地址。

    我们以选股宝为例子来进行讲解。https://xuangubao.cn/

    打开网页选股宝,然后打开审查元素

    打开后我们可以看到一堆<div>块标签,打开后里面没有网页数据

    点击网络标签,我们可以看到网页向服务器发送了很多请求,数据很多,找起来太费时间

    我们点击XHR分类,可以减少很多不必要的文件,省下很多时间。

    【XHR类型即通过XMLHttpRequest方法发送的请求,它可以在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新。也就是说,向数据库请求然后得到响应的数据是XHR类型的】

    然后我们在XHR类型下开始一个个找,找到了如下的数据

    查看该请求的消息头,获取它的url


    url="https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30"

    在火狐浏览器的新窗口打开该地址

    打开后我们可以看到上面的情况,这是个json格式的文件。然后,它的数据信息是以字典的形式来保存的,而数据是都保存在“NewMsgs”这个键值里面。

    所以,我们可以通过访问["NewMsgs"]这个键值来获取网页数据

    然后我们再检查下我们需要的“利好”和“利空”所对应的键值,以及简讯推荐的股票和行业对应的键值。

    通过查看字典我们可以很快发现推荐股票是个嵌套的字典,是字典加列表加字典的形势  对应的键值是["NewMsgs"][i]['Stocks']同理,对应的推荐行业键值为:["NewMsgs"][i]['BkjInfoArr']

    再对比下网页数据,我们可以找到对应的“利好”和“利空”简讯。

    通过对比,我们发现有利好标签的简讯 对应的“Impact”值为1,而没有的为“0”,利空标签的简讯则值为“-1”


    知道了数据的位置后,我们开始来写代码。

    先抓取网页,通过添加headers来伪装成火狐浏览器来对数据库地址进行访问,防止被识别后拦截。

    def get_page(url):
        headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
    }
        req = urllib.request.Request(url=url,headers=headers)
        res = urllib.request.urlopen(req)
        html = res.read().decode()
        return html
    由上文的分析,我们可以知道数据是json形式来存储的,所以上面抓取网页返回的html是json格式的数据。因此我们要对json进行格式化。
    json.dumps()#把python对象转化成json格式对象
    json.loads()#把json格式转化成python对象

    通过转化后,我们可以通过以下字典的键值来输出“利好”,“利空”,推荐“股票”,推荐“行业”

    行业:html["NewMsgs"][i]['BkjInfoArr']
    时间:html["NewMsgs"][i]['UpdatedAt']
    股票:html["NewMsgs"][i]['Stocks'][j]['Name']
    利好:html["NewMsgs"][i]['Impact']  Impact = -1 --->利空   Impact = 1 --->利好
    所以抓取数据的代码为:
    def get_data(html,url):
        html = json.loads(html)
        c = len(html["NewMsgs"])
        for i in range(0,c):
            cun =html["NewMsgs"][i]['Impact']#获取含有信息的字典
    
            if cun == 1 or cun == -1:#判断信息是利好还是利空
                print(html["NewMsgs"][i]['UpdatedAt'])
                if cun == 1:
                    print("*************利好*************")
                if cun == -1:
                    print('*************利空*************')
    
                chang = len(html["NewMsgs"][i]['BkjInfoArr'])#获取信息下含有几个利好或利空行业
                ch =html["NewMsgs"][i]['Stocks']
                for j in range(0,chang):
                    print('行业:',html["NewMsgs"][i]['BkjInfoArr'][j]['Name'])
                if ch!=None:
                    du = len(html["NewMsgs"][i]['Stocks'])#同理获取含有几个利好或利空股票
                    for k in range(0,du):
                        print('股票:',html["NewMsgs"][i]['Stocks'][k]['Name'])
                print("**************************\n\n")#信息获取完毕,换行 
        return 0

    通过运行,我们发现获取的数据很少,只能获取“点击加载更多”上面的以显示的内容,无法获取点击加载后的数据


    我们的爬虫需要抓取的数据不能这么少,我们需要的是能抓取包括点击“加载更多”的按钮后的数据的爬虫。不然使用爬虫就不如直接访问网站来的直接了。那么怎么才能连同下面的数据也抓取到呢?

    我们再次进入审查元素的XHR类型,通过点击“加载更多”的按钮后再审查元素里查找加载后的新内容保存的文件。

    我们找到了保存新数据的文件和新文件的url地址

    我们注意到了url有了变化,为“https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30&tailmark=1529497523&msgIdMark=310241”点击打开链接

    比前面的数据url多了后面的一些字符。我们再多点击几下“加载更多”来查看新的内容的文件数据,看看能不能发现一些规律。

    我们把新的url整理在一起,进行对比:

    https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30&tailmark=1529497523&msgIdMark=310241
    https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30&tailmark=1529493624&msgIdMark=310193
    https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30&tailmark=1529487816&msgIdMark=310151
    

    第一个url:

    第二个url:

    第三个url:

    通过对比,我们可以发现 加载之后的json数据文件的地址,是与前一个json文件的['TailMark']和['TailMsgId']有关的。

    是在原url=“https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30”的基础上,再加上后缀    

    “&tailmark=['TailMark']&msgIdMark=['TailMsgId']”

    而得到的url地址。

    所以,我们获取它下一个url地址的代码是:

    def get_newurl(html):
        url="https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30"
        url=url+'&tailmark='+html['TailMark']+'&msgIdMark='+html['TailMsgId']
        return url
    
    那我们的爬虫代码就基本写完了,以下是整个爬虫的代码:
    # -*- coding:utf-8 -*-
    import urllib.request
    import urllib.parse
    import time
    import json
    
    
    #获取网页
    def get_page(url):
        headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
    }
        req = urllib.request.Request(url=url,headers=headers)
        res = urllib.request.urlopen(req)
        html = res.read().decode()
        return html
    
    #获取下一页网址
    def get_newurl(html):
        url="https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30"
        url=url+'&tailmark='+html['TailMark']+'&msgIdMark='+html['TailMsgId']
        return url
    
    
        
    #获取数据
    def get_data(html,url):
        html = json.loads(html)
        c = len(html["NewMsgs"])
        for i in range(0,c):
            cun =html["NewMsgs"][i]['Impact']#获取含有信息的字典
    
            if cun == 1 or cun == -1:#判断信息是利好还是利空
                print(html["NewMsgs"][i]['UpdatedAt'])
                if cun == 1:
                    print("*************利好*************")
                if cun == -1:
                    print('*************利空*************')
    
                chang = len(html["NewMsgs"][i]['BkjInfoArr'])#获取信息下含有几个利好或利空行业
                ch =html["NewMsgs"][i]['Stocks']
                for j in range(0,chang):
                    print('行业:',html["NewMsgs"][i]['BkjInfoArr'][j]['Name'])
                if ch!=None:
                    du = len(html["NewMsgs"][i]['Stocks'])#同理获取含有几个利好或利空股票
                    for k in range(0,du):
                        print('股票:',html["NewMsgs"][i]['Stocks'][k]['Name'])
                print("**************************\n\n")#信息获取完毕,换行 
        #获取通过函数获取下一页的url地址并返回该地址
        url = get_newurl(html)
        return url
    
    if __name__=='__main__':
        url="https://api.xuangubao.cn/api/pc/msgs?subjids=9,10,723,35,469,821&limit=30"
        for i in range(0,5):#进行循环爬取下一页地址的股票信息
            html=get_page(url)
            url=get_data(html,url)
    

    因为是刚学不久,所以很多地方写得不好,比较繁琐冗长,还请大神赐教 
    展开全文
  • jsoup只适用于爬取静态网页,爬取动态网页时往往获取不到数据,此时不想使用其他框架可参照以下自创方法获取: 1.打开先要爬取的页面按f12用定位光标将elements内容全部展开,复制elements中的全部内容 2.打开...

    jsoup爬取

    jsoup只适用于爬取静态网页,爬取动态网页时往往获取不到数据,此时不想使用其他框架可参照以下自创方法获取:
    1.打开先要爬取的页面按f12用定位光标将elements内容全部展开,复制elements中的全部内容
    2.打开eclipse创建一个动态web项目并创建一个html文件
    3.将复制的elements中的内容粘贴在html中并运行
    4.jsoup爬取本地运行tomcat网址就可以按照正常网页爬取步骤进行爬取

    注:此方法只适用于暂时不太熟悉爬虫框架并且少量爬取工程,如有精力还是要好好深入学习爬虫,如有用处请给博主点个赞

    展开全文
  • 爬取内容:第一页至十五页网页页面中的“代码”,“名称”“公告标题”,“公 告类型”以及“公告日期”数据信息存储至“股票数据.CSV”文件。 from bs4 import BeautifulSoup import bs4,csv import time from ...
    • 实验一 股票数据爬取
    爬取网站:  http://data.eastmoney.com/notices/hsa.html
    爬取内容:第一页至十五页网页页面中的“代码”,“名称”“公告标题”,“公 告类型”以及“公告日期”数据信息存储至“ 股票数据 .CSV ”文件。
    from bs4 import BeautifulSoup
    import bs4,csv
    import time
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    browser = webdriver.Chrome()
    browser.get('http://data.eastmoney.com/notices/')
    wait = WebDriverWait(browser, 10)
    #browser.find_element_by_css_selector('#dt_1').click()
    table_emergence = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#dt_1')))
    
    
    ###################信息提取######################
    info = []
    def get_info(html):
    	soup = BeautifulSoup(html, 'lxml')
    	table = soup.find(name='table', attrs={'''id''': 'dt_1'})
    	trs = table.find('tbody').children
    	for tr in trs:
    		if isinstance(tr, bs4.element.Tag):
    			tds = tr.find_all('td')
    			code = tds[0].a.string
    			name = tds[1].a.string
    			title = tds[3].a.string
    			title_type = tds[4].span.string
    			time = tds[5].span.string
    			sub_info = [code, name, title, title_type, time]
    			info.append(sub_info)
    
    #############翻页操作######################
    def next_page(page_number):
    	try:
    		wait = WebDriverWait(browser, 20)
    		inputs = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#PageContgopage')))
    		submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#PageCont > a.btn_link')))
    		inputs.clear()
    		inputs.send_keys(page_number)
    		submit.click()
    		wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#PageCont > span.at'), str(page_number)))
    	except TimeoutException:
    		next_page(page_number)
    
    ######################保存数据##################################
    def save_data(data):
    	with open('股票数据.csv', 'w', newline='', encoding='utf-8') as f:
    		writer = csv.writer(f)
    		writer.writerow(['代码', '名称', '公告标题', '公告类型', '公告日期'])
    		for a in data:
    			print(a)
    			writer.writerow(a)
    
    
    for i in range(0, 16):
    	get_info(browser.page_source)
    	next_page(i+2)
    	time.sleep(2)
    save_data(info)
    browser.close()
    • 实验二 地震台数据爬取
    爬取网站 : http://www.ceic.ac.cn/history
    实验内容: 第一页至 第十五页中页面中的“震级”、“发震时刻”、“维度”、“经度”、“深度” 以及“参考位置信息”信息存储至“ 地震台信息 .csv ”文件。(提示: 需要先点击“查询”按钮才可以得到目标页面)
    from bs4 import BeautifulSoup
    import bs4,csv,numpy
    import time
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    
    browser = webdriver.Chrome()
    browser.get('http://www.ceic.ac.cn/history')
    wait = WebDriverWait(browser, 5)
    browser.find_element_by_class_name('check').click()
    time.sleep(2)
    
    
    #################信息提取######################
    info = []
    def get_info(html):
    	soup = BeautifulSoup(html, 'lxml')
    	td = soup.find_all('td')
    	for td in td:
    		info.append(td.text)
    
    #####################翻页操作######################
    def next_page():
    	try:
    		wait = WebDriverWait(browser, 10)
    		nextpage = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.page > [alt=下一页]')))
    		nextpage.click()
    	except TimeoutException:
    		next_page()
    
    #######################保存数据###################################
    def save_data(data):
    	with open('地震台信息.csv', 'w', newline='', encoding='utf-8') as f:
    		writer = csv.writer(f)
    		writer.writerow(['震级(M)','发震时刻(UTC+8)','纬度(°)','经度(°)','深度(千米)','参考位置'])
    		for a in data:
    			print(a)
    			writer.writerow(a)
    
    ###################循环爬取多页数据##############################
    for i in range(0,15):
    	html = browser.page_source
    	get_info(html)
    	next_page()
    	time.sleep(2)
    info = numpy.array(info).reshape((int)(len(info)/6), 6)
    save_data(info)
    
    browser.close()
    
    
    
    • 实验三 京东数据爬取
    爬取网站:  https://search.jd.com/Search?keyword=python
    实验内容:第一页至十五页网页页面中的书籍的名称、价格、图书封面照片的链接、评价数、出版社信息存储至“ 京东 -python 图书信息 .CSV ” 文件。
    from bs4 import BeautifulSoup
    import bs4,csv,numpy
    import time
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    
    browser = webdriver.Chrome()
    browser.get('http://www.jd.com')
    wait = WebDriverWait(browser, 5)
    input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[aria-label=搜索]')))
    submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label=搜索]')))
    input.clear()
    input.send_keys('python')
    submit.click()
    time.sleep(2)
    js="document.documentElement.scrollTop=10000"
    browser.execute_script(js)
    time.sleep(2)
    
    #################信息提取######################
    books = []
    def get_info(html):
        soup = BeautifulSoup(html, 'lxml')
        tag_img = soup.select('#J_goodsList > ul > li > div > div.p-img')
        tag_price = soup.select('#J_goodsList > ul > li > div > div.p-price')
        tag_name = soup.select('#J_goodsList > ul > li > div > div.p-name > a > em')
        tag_publish = soup.select('#J_goodsList > ul > li > div > div.p-shopnum')
        tag_comment = soup.select('#J_goodsList > ul > li > div > div.p-commit')
        #advertising = soup.select('# J_goodsList > ul > li > div > div.p-market')
    
        for i in range(0,len(tag_img)):
            temp = []
            temp.append(tag_name[i].text)
            temp.append(tag_price[i].text.strip().replace('\n',''))
            temp.append(tag_img[i].a.img)
            temp.append(tag_comment[i].text.replace('\n', ''))
            temp.append(tag_publish[i].text.replace('\n',''))
            books.append(temp)
    
    #############翻页操作######################
    def next_page():
        try:
            wait = WebDriverWait(browser, 10)
            nextpage = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.pn-next > em')))
            nextpage.click()
            time.sleep(2)
            js = "document.documentElement.scrollTop=10000"
            browser.execute_script(js)
        except TimeoutException:
            next_page()
    
    #######################保存数据###################################
    def save_data(data):
    	with open('京东-python 图书信息.csv', 'w', newline='', encoding='utf-8') as f:
    		writer = csv.writer(f)
    		writer.writerow(['名称','价格','封面','评论数','出版社'])
    		for a in data:
    			print(a)
    			writer.writerow(a)
    
    ###################循环爬取多页数据##############################
    for i in range(0,168):
        html = browser.page_source
        get_info(html)
        next_page()
        time.sleep(5)
    save_data(books)
    browser.quit()

    上面的代码不能过滤广告,不能爬取一些特殊的书籍,以下是修正后的代码:

    from bs4 import BeautifulSoup
    import csv
    import time
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    browser = webdriver.Chrome()
    browser.get('http://www.jd.com')
    wait = WebDriverWait(browser, 5)
    #定位搜索框与搜索按钮,搜索python
    input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[aria-label=搜索]')))
    submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label=搜索]')))
    input.clear()
    input.send_keys('python')
    submit.click()
    time.sleep(2)
    #滚动垂直进度条到最下方
    js="document.documentElement.scrollTop=10000"
    browser.execute_script(js)
    time.sleep(2)
    
    #################信息提取######################
    books = []  #存放书籍信息
    def get_info(html):
        tag_books = BeautifulSoup(html, 'lxml').select('#J_goodsList > ul > li > div')  #提取所有书籍信息
        for tag_book in tag_books:
            soup = BeautifulSoup(str(tag_book), 'lxml')   #提取某一本书的具体信息
            tag_advertising = soup.select('span.p-promo-flag')  #查找广告
            if(len(tag_advertising) == 1):  #过滤广告
                continue
            #提取某一本书的各项信息
            tag_flag = soup.select('div > div.gl-i-tab-content')
            tag_img = soup.select('div.p-img')
            tag_price = soup.select('div.p-price')
            tag_name = soup.select('div.p-name > a > em')
            tag_publish = soup.select('div.p-bookdetails > span.p-bi-store')
            tag_comment = soup.select('div.p-commit')
            temp_book = []  # 暂时存放某一本书的各项信息
            # 提取无套件的书籍信息
            if (len(tag_flag) == 0):
                temp_book.append(tag_name[0].text)
                temp_book.append(tag_price[0].text.strip().replace('\n', ''))
    
                temp_src = tag_img[0].a.get('src')
                if (temp_src == None):
                    temp_href = tag_img[0].a.get('href')
                    if (temp_href[0] != 'h'):
                        temp_book.append('https:' + tag_img[0].a.get('href'))
                else:
                    temp_book.append(temp_src)
    
                if (len(tag_publish) == 1):
                    temp_book.append(tag_publish[0].text.replace('\n', ''))
                else:
                    temp_book.append('无')
    
                temp_book.append(tag_comment[0].text.replace('\n', ''))
                books.append(temp_book)
            # 提取有套件的书籍信息
            else:
                #一个div下多个书籍套件的提取
                for i in range(0,len(tag_name)):
                    temp_books = []
                    temp_books.append(tag_name[i].text)
                    temp_books.append(tag_price[i].text.strip().replace('\n', '')[0:6])
    
                    temp_src = tag_img[i].a.get('src')
                    if (temp_src == None):
                        temp_href = tag_img[i].a.get('href')
                        if (temp_href[i] != 'h'):
                            temp_books.append('https:' + tag_img[i].a.get('href'))
                    else:
                        temp_books.append(temp_src)
    
                    if (len(tag_publish) == 1):
                        temp_books.append(tag_publish[0].text.replace('\n', ''))
                    else:
                        temp_books.append('无')
    
                    if(tag_comment[i].text.replace('\n', '')==''):
                        temp_books.append('无')
                    else:
                        temp_books.append(tag_comment[i].text.replace('\n', ''))
                    books.append(temp_books)
    
    #############翻页操作######################
    def next_page():
        try:
            wait = WebDriverWait(browser, 10)
            nextpage = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.pn-next > em')))
            nextpage.click()
            time.sleep(2)
            js = "document.documentElement.scrollTop=10000"
            browser.execute_script(js)
        except TimeoutException:
            next_page()
    
    #######################保存数据###################################
    def save_data(data):
    	with open('京东-python 图书信息.csv', 'w', newline='', encoding='utf-8') as f:
    		writer = csv.writer(f)
    		writer.writerow(['名称','价格','封面','评论数','出版社'])
    		for a in data:
    			print(a)
    			writer.writerow(a)
    
    ###################循环爬取多页数据##############################
    html = browser.page_source
    get_info(html)
    for i in range(0,16):
        next_page()
        time.sleep(5)
        html = browser.page_source
        get_info(html)
    
    save_data(books)
    
    browser.close()

     

    展开全文
  • 一、什么是动态网页 所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然...
  • 使用Selenium爬取动态网页

    千次阅读 2018-08-18 09:28:38
    通过page_source属性可以获得网页源代码 selenium可以驱动浏览器完成各种操作,如填充表单、模拟点击等。 获取单个节点的方法: find_element_by_id find_element_by_name find_element_by_xpath find_element_by...
  • Python爬虫爬取动态网页

    万次阅读 多人点赞 2018-05-01 20:05:54
    Python modules:requests、random、jsonBackground:对于静态网页,我们只需要把网页地址栏中的url传到get请求中就可以轻松地获取到网页的数据。但是,我们经常会遇到直接把网页地址栏中的url传到get请求中无法直接获...
  • nodejs 爬取动态网页

    万次阅读 2018-06-25 09:40:35
    昨天实现了草榴的爬取 nodejs 做一个简单的爬虫爬草榴,今天对代码做了一部分修改,增加了可以指定开始页和结束页,并且给所有文件都单独创建了文件夹。那么问题来了,说好的爬 街拍图片 呢?毕竟爬完草榴的东西并不...
  • 前言 本人初学爬虫练习写的爬虫代码,如有什么问题和建议,欢迎留言...1. 如何爬取动态网页上的数据 对于静态网页,使用requests等库可以很方便的得到它的网页源码,然后提取出想要的信息。但是对于动态网页,情况就
  • 前言 之前写过介绍过网络爬虫的文章,都是一些基础知识,所以在接下来我们完成一个小任务——利用逆向工程爬取一个动态网页,360壁纸网站(https://image.so.com/z?ch=wallpaper#/),爬取前十页图片: 面临问题 ...
  • Python如何爬取动态网页内容

    千次阅读 2019-07-13 15:04:09
    根据权威机构发布的全球互联网可访问性审计报告,全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的,这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容,也就是说我们...
  • java爬虫系列(二)——爬取动态网页

    万次阅读 热门讨论 2018-01-01 15:59:40
    准备工作 项目地址 网页解析工具地址 启动网页解析器 根据系统选择所需文件 ...新手的话推荐使用seimiagent+seimicrawler的爬取方式,非常容易上手,轻松爬取动态网页,目测初步上手10分钟以内...
  • python爬取动态网页PAT

    2020-05-25 10:46:09
    背景 最近刷PTA写题解的时候,需要复制每个题目到md文件,很...selenium 爬取动态页面 html2text 将html解析为md 项目代码 代码讲解(完整代码文章末) 导入库 from selenium import webdriver from selenium.web
  • Python爬取动态网页实例讲解

    万次阅读 2019-03-30 23:10:57
    下面用一个实例来记录一下爬取动态网页的步骤。 实例:股票定向爬虫 这个实例目标是从东方财富网获取股票列表,然后根据股票列表逐个到百度股票获取个股信息,最后将结果存储到文件。基本也看的出来代码就是上面三个...
  • 在确认网页是动态网页后,需要获取从网页响应中由JavaScript动态加载生成的信息,在谷歌浏览器中爬取今日头条首页的信息,步骤如下。 1. “F12”键打开今日头条首页的网页调试工具. 2. 点击“Network”选项卡后...
  • 本文将实现爬取网页中类似的动态加载的数据。 1. 那么什么是动态加载的数据? 我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是通过非浏览器地址栏中的url请求得到的。而是通过其他请求请求到...
  • 请教大神,在Python中利用正则爬取用js生成的数据,爬取网易新闻中的评论
  • 的最新上架衣服图片,但网页动态加载的(有一个查看全部按钮) ![图片说明](https://img-ask.csdn.net/upload/202001/30/1580376878_572107.png) 点击查看更多后有一个XHR请求如图![图片说明]...
  • 今天爬学院的新闻网页,是aspx动态网页,琢磨了半天,发现只能使用cookie进行模拟登录 才会显示正确的内容,且只能将cookie写在header里如 ``` headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64;...
  • #需要pip selenium from selenium import webdriver #需要下载chromedriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') ...
  • Selenium 是一个用于浏览器自动化测试的框架,可以用来爬取任何网页上看到的数据。 Selenium的下载与安装 安装:在终端输入 pip install selenium 下载:http://chromedriver.storage.googleapis.com/index.html...
  • 1.首先,京东的网页动态的,当我们搜索一个商品时,需要把页面往下翻,下面的内容才会出来,这也是我们选selenium方法的原因 解决方法:让浏览器模拟下拉几次页面即可 from selenium import webdriver import time...
  • 但发现这个网站的每次点下一页都是相同的URL地址,也就是说源代码只显示第一页的评论内容,对于用requests来爬取网页内容,用这个地址的话无法爬取更多内容。后来查了一下,这是用了Ajax动态加载技术,专门用来动...
  • 现在网页大多是动态网页,如果只是单纯地通过爬取网页HTML文件,根本爬取不到需要后续加载的商品价格或图片等重要信息,更别谈那些丧心病狂的登录限制,对于小爬虫来说,去分析那些复杂的脚本得不偿失,更别谈网站还...
  • 文章目录一、找到动态位置二、确定post的url三、 爬取网页1. 获取网页2. 解析网页3. 数据打开4.文件保存附录:完整的python代码 本文主要通过一个实例,实现Ajax动态加载和翻页时url不变的网页。实例网址如下,在...
  • R语言:RSelenium包爬取动态网页

    千次阅读 2018-01-07 23:28:58
    对于这种网站,如果使用rvest包或RCurl包进行爬取,只能抓到第一页的数据。不过不用担心,对付这种情况,可以使用R语言中RSelenium包。  RSelenium包可以通过调用Selenium Server来模拟浏览器环境,它可以模拟...
  • Selenium 是一个用于浏览器自动化测试的框架,可以用来爬取任何网页上看到的数据。 selinim,京东淘宝反爬严重 http://http://npm.taobao.org/mirrors/chromedriver/2.33/ 环境变量设置:我的电脑-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,848
精华内容 6,339
关键字:

爬取动态网页