网络爬虫之动态内容爬取(代码片段)

xiaobingqianrui xiaobingqianrui     2023-01-26     496

关键词:

  根据联合国网站可访问性审计报告,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"])

   输出:

  技术分享图片

python基础之爬虫:爬取小说,图片示例(代码片段)

一、用python里面的beautifulsoup爬取网页中的小说原来网页内容:http://www.jueshitangmen.info/tian-meng-bing-can-11.html#爬虫frombs4importBeautifulSoupfromurllib.requestimporturlopenhtml=urlopen('http://www.jues 查看详情

爬虫实例——爬取微博动态(代码片段)

首语:开始准备认真学习爬虫了,先从基础的开始学起,比如先爬取微博的个人动态。两个难点:获取动态加载的内容和翻页这两项操作。对象:何炅的个人需要的URL:  首页url:https://weibo.com/hejiong?is_search=0&visible=0&is_a... 查看详情

python第一条网络爬虫,爬取一个网页的内容(代码片段)

一、球赛结果预测代码部分函数测试。    二、用requests库函数访问搜狗网页20次。1importrequests2frombs4importBeautifulSoup3defgetHTMLText(self):4try:5r=requests.get(url,timeout=30)#如果状态不是200,引发异常6r.raise_for_status( 查看详情

python第一条网络爬虫,爬取一个网页的内容(代码片段)

一、球赛结果预测代码部分函数测试。    二、用requests库函数访问搜狗网页20次。1importrequests2frombs4importBeautifulSoup3defgetHTMLText(self):4try:5r=requests.get(url,timeout=30)#如果状态不是200,引发异常6r.raise_for_status( 查看详情

python网络爬虫课程设计(代码片段)

...什么?(10分)为了通过爬取网站获取的信息来分析现在网络上社会、经济、技术等各种信息网站的影响力排行,以此了解人们对哪种信息网站更青睐,访问的更加频繁。二、主题式网络爬虫设计方案(10分)1.主题式网络爬虫名... 查看详情

python爬虫之运用scrapy框架将爬取的内容存入文件和数据库(代码片段)

文章目录前言源码爬虫文件(test1)pipelines.pysetting.py运行结果前言主要运用了scrapy持久化存储操作,下面主要展示spider和管道文件及一些设置。源码爬取的是itcast师资信息http://www.itcast.cn/channel/teacher.shtml#ajavaee爬虫文... 查看详情

爬虫之爬取电影天堂(request)(代码片段)

#需要通过代码打开https://www.dytt8.net/网站,拿到网站内容fromurllib.requestimporturlopen#拿到urlopenimportrecontent=urlopen("https://www.dytt8.net/").read().decode("gbk")#获取到最新电影的部分链接#正则表达式,匹配字符串lst=re.findall("最新电影下载&l 查看详情

python爬虫之selenium+beautifulsoup库,爬取搜索内容并保存excel(代码片段)

...使用,及浏览器提取信息相关方法。参考:python爬虫之selenium库现在目标要求,用爬虫通过浏览器,搜索关键词,将搜索到的视频信息存储在excel表中。二、创建excel表格,以及chrome驱动n=1word=input('... 查看详情

python爬虫之链家二手房数据爬取(代码片段)

Python依赖模块:requestsparselcsv功能要求:请求网页打开开发者工具( F12或者鼠标右键点击检查 )选择 notework 查看数据返回的内容。 通过开发者工具可以看到,网站是静态网页数据,请求url地址是可以... 查看详情

python开发爬虫之动态网页抓取篇:爬取博客评论数据

以爬取《Python网络爬虫:从入门到实践》一书作者的个人博客评论为例。网址:http://www.santostang.com/2017/03/02/hello-world/1)“抓包”:找到真实的数据地址 右键点击“检查”,点击“network”,选择“js”。刷新一下页面,选中... 查看详情

robots.txt协议(代码片段)

robots.txt协议RobitsExclusionStandard网络爬虫排除标准作用:网站告知网络爬虫那些页面可以爬取,那些不行。形式:在网站根目录下的robots.txt文件百度的robots协议:https://www.baidu.com/robots.txt#例子:User-agent:Baiduspider#(百度爬虫引擎)允... 查看详情

网络爬虫之requests模块(代码片段)

...习什么是requests模块? requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。为什么要使用requests模块因为在使用urllib模块... 查看详情

go函数特性和网络爬虫示例(代码片段)

爬取页面这篇通过网络爬虫的示例,来了解Go语言的递归、多返回值、延迟函数调用、匿名函数等方面的函数特性。首先是爬虫的基础示例,下面两个例子展示通过net/http包来爬取页面的内容。获取一个URL下面的程序展示从互联... 查看详情

爬取b站热门视频排行榜(代码片段)

一、主题式网络爬虫设计方案1.主题式网络爬虫名称:爬取B站热门视频排行榜2.主题式网络爬虫爬取的内容:统计所有投稿视频的数据综合得分,每日更新数据(作品,播放量,弹幕,作者)3.主题式网络爬虫设计方案概述:找到网... 查看详情

网络爬虫之selenium(综述)

   现阶段网络爬虫的工具主要是有scrapy、selenium(第二版)等。总的来说各有好处,scrapy最大的好处是爬取的速度快而selenium的好处是能爬去的网站种类多。详细点的解释是:scrapy在爬取网页时不用点击开页面(selenium... 查看详情

爬虫系列之股票信息爬取(代码片段)

1.总述慕课中这段代码的功能是首先从东方财富网上获得所有股票的代码,再利用我们所获得的股票代码输入url中进入百度股票页面爬取该只股票的详细信息。1importrequests2frombs4importBeautifulSoup3importtraceback4importre567defgetHTMLText(url):8... 查看详情

scrapy初探之爬取武sir首页博客(代码片段)

一、爬虫网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或... 查看详情

爬虫系列之淘宝商品爬取(代码片段)

1importre2importrequests34defgetHTMLText(url):5try:6r=requests.get(url,timeout=30)7r.raise_for_status()8r.encoding=r.apparent_encoding9returnr.text10except:11return""121314defparsePage(ilt,html):15try 查看详情