网络爬虫之动态内容爬取

  根据联合国网站可访问性审计报告,73%的主流网站都在其重要功能中依赖JavaScript。和单页面应用的简单表单事件不通,使用JavaScript时,不再是加载后立即下载所有页面内容。这样会造成许多网页在浏览其中展示的内容不会出现在HTML源码中,针对于这种依赖于JavaScript的动态网站,我们需要采取相应方法,比如JavaScript逆向工程、渲染JavaScript等方法。

1. 动态网页示例

  

  如上图,打开智联招聘主页,输入python,搜索会出现上面的页面,现在我们爬取上图红色标记出的链接地址

  首先分析网页,获取该位置的div元素信息,我这里使用的是firefox浏览器,按F12

  

  看上图,红色标记就是我们要获取的链接地址,现在用代码获取该处链接试试看

import requests
from bs4 import BeautifulSoup as bs

url = ‘https://sou.zhaopin.com/?jl=736&kw=python&kt=3‘
reponse = requests.get(url)
soup = bs(reponse.text,"lxml")
print(soup.select(‘span[title="JAVA软件工程师"]‘))
print(soup.select(‘a[class~="contentpile__content__wrapper__item__info"]‘))

  输出结果为:[ ] [ ]

  表示这个示例爬虫失败了,检查源码也会发现我们抓取的元素实际是空的,而firefox显示给我们的却是网页当前的状态,也就是使用JavaScript动态加载玩搜索结果后的网页。

2. 对动态网页进行逆向工程

  在firefox中按F12单击控制台,打开XHR

  依次点开,并查看响应出内容

  会发现最后一行有我们要的内容,继续点开results的索引0

  

  很好,这就是我们要找的信息

  接下来我们就可以对第三行的网址进行爬虫处理并获取我们的想要的json信息。

3. 代码实现

  下面的代码演示爬取python搜索的第一页,并获取下图的链接

  

import requests
import urllib
import http
import json

def format_url(url, start=0,pagesize=60,cityid=736,workEXperience=-1,
            education=-1,companyType=-1,employmentType=-1,jobWelfareTag=-1,
            kw="python",kt=3):
    url = url.format(start,pagesize,cityid,workEXperience,education,companyType,                    employmentType,jobWelfareTag,kw,kt)
    return url;

def ParseUrlToHtml(url,headers):
    cjar = http.cookiejar.CookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPSHandler, urllib.request.HTTPCookieProcessor(cjar))
    headers_list = []
    for key,value in headers.items():
        headers_list.append(key)
        headers_list.append(value)
    opener.add_headers = [headers_list]
    html = None
    try:
        urllib.request.install_opener(opener)
        request = urllib.request.Request(url)
        reponse = opener.open(request)
        html = reponse.read().decode(‘utf-8‘)
    except urllib.error.URLError as e:
        if hasattr(e, ‘code‘):
            print ("HTTPErro:", e.code)
        elif hasattr(e, ‘reason‘):
            print ("URLErro:", e.reason)

    return opener,reponse,html

if __name__ == "__main__":
    url = ‘https://fe-api.zhaopin.com/c/i/sou?start={}&pageSize={}&cityId={}‘            ‘&workExperience={}&education={}&companyType={}&employmentType={}‘            ‘&jobWelfareTag={}&kw={}&kt={}&_v=0.11773497‘            ‘&x-zp-page-request-id=080667c3cd2a48d79b31528c16a7b0e4-1543371722658-50400‘

    headers = {"Connection":"keep-alive",
                "Accept":"application/json, text/plain, */*",
               ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0‘}

    opener,reponse,html = ParseUrlToHtml(format_url(url), headers)
    if reponse.code == 200:
        try:
            ajax = json.loads(html)
        except ValueError as e:
            print(e)
            ajax = None
        else:
            ‘‘‘print(ajax)
            with open("zlzp.txt", "w") as pf:
                pf.write(json.dumps(ajax,indent=4))‘‘‘
            results = ajax["data"]["results"]
            for result in results:
                if result["jobName"] == "JAVA软件工程师" and result["company"]["name"] == "湖北航天信息技术有限公司":
                    print(result["positionURL"])

  输出:

  

原文地址:https://www.cnblogs.com/xiaobingqianrui/p/10031481.html

时间: 2024-10-06 17:31:38

网络爬虫之动态内容爬取的相关文章

【Python网络爬虫四】多线程爬取多张百度图片的图片

最近看了女神的新剧<逃避虽然可耻但有用> 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片. 百度搜索结果:新恒结衣 1.下载简单页面 通过查看网页的html源码,分析得出,同一张图片共有4种链接: {"thumbURL":"http://img5.imgtn.bdimg.com/it/u=2243348409,3607039200&fm=23&gp=0.jpg", "middleURL":"http://i

Python网络爬虫(6)--爬取淘宝模特图片

经过前面的一些基础学习,我们大致知道了如何爬取并解析一个网页中的信息,这里我们来做一个更有意思的事情,爬取MM图片并保存.网址为https://mm.taobao.com/json/request_top_list.htm.这个网址有很多页,通过在网址后添加?page=页码来进入指定的页. 为了爬取模特的图片,我们首先要找到各个模特自己的页面.通过查看网页源码,我们可以发现,模特各自的页面的特点如下: 我们可以通过查找class属性为lady-name的标签,然后取其href属性来获取各个模特各

python网络爬虫第三弹(&lt;爬取get请求的页面数据&gt;)

一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib.parse,在python2中的是 urllib 和 urllib2 二.由易到难首页面所有的数据值 1.爬取百度首页所有的数据值 import urllib.request import urllib.parse url = 'http://www.baidu.com' # 通过 URLopen

网络爬虫:使用多线程爬取网页链接

前言: 经过前面两篇文章,你想大家应该已经知道网络爬虫是怎么一回事了.这篇文章会在之前做过的事情上做一些改进,以及说明之前的做法的不足之处. 思路分析: 1.逻辑结构图 上图中展示的就是我们网络爬虫中的整个逻辑思路(调用Python解析URL,这里仅仅作了简略的展示). 2.思路说明: 首先.我们来把之前思路梳理一下.之前我们採用的两个队列Queue来保存已经訪问过和待訪问的链接列表,并採用广度优先搜索进行递归訪问这些待訪问的链接地址.并且这里使用的是单线程操作. 在对数据库的操作中.我们加入了

python网络爬虫(7)爬取静态数据详解

目的 爬取http://seputu.com/数据并存储csv文件 导入库 lxml用于解析解析网页HTML等源码,提取数据.一些参考:https://www.cnblogs.com/zhangxinqi/p/9210211.html requests请求网页 chardet用于判断网页中的字符编码格式 csv用于存储文本使用. re用于正则表达式 from lxml import etree import requests import chardet import csv import re

iOS开发——网络使用技术OC篇&amp;网络爬虫-使用正则表达式抓取网络数据

网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看看网络爬虫的基本原理: 一个通用的网络爬虫的框架如图所示: 网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中.

动态网页爬取例子(WebCollector+selenium+phantomjs)

目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>. 这里用了WebCollector 2进行爬虫,这东东也方便,不过要支持动态关键还是要靠另外一个API -- selen

爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 1. scrapy图片的爬取/基于管道类实现 2. 中间件的使用 3. selenium在scrapy中的应用 4. CrawlSpider 5. 分布式 5. 增量式 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 1. scrapy图片的爬取/基于管道类实现 爬取流程: 爬虫类中将解析到的图片

Python Scrapy的QQ音乐爬虫 音乐下载、爬取歌曲信息、歌词、精彩评论

QQ音乐爬虫(with scrapy)/QQ Music Spider 磁力搜索网站2020/01/07更新 https://www.cnblogs.com/cilisousuo/p/12099547.html UPDATE 2019.12.23 已实现对QQ音乐文件的下载,出于版权考虑,不对此部分代码进行公开.此项目仅作为学习交流使用,支持正版,人人有责 项目介绍 在写一个项目的时候需要用到一些音乐的信息,但是在网上找了许久也没找到满意的音乐语料,于是便用scrapy写了一个QQ音乐的爬虫 由