2021/5/12爬虫11回の授业(アヤクス、selenium、phantomjs)

記事のリスト

2、アヤクス技術の処理(selenium背景绍介)

前导:

我々以前に上って取りのページでは一部の静止画がほとんどページ

静止画のホームページが何か?

静止画サイト以外にも一部のホームページのあるいはのデータがこののurlアドレスを要請した。

2.2をアヤクスノードのデータの方式

1 .直接分析をアヤクス発進インタフェースの真の目標(url)。
2 .使用selenium + chromedriver模擬ブラウザ行為をデータ

では二つの方式でどちらか。
事例分析アヤクス(直接発進のインタフェース)

百度贴吧
需求:爬取 海贼王吧 爬取桌面壁纸
​
1 分析页面
我们发现要爬取的数据是图片,那么就只要找到它(每张图片)的src 就可以了

经过分析发现网页源码当中没有我们想要爬取的数据。然后我们确定它是经过ajax加载的数据
一般情况下 ajax请求都在 XHR这个选项(XMLHttpRequest)
通过network 继续找真实的数据接口
​
目标url
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466
​
解析数据
可以把(response)数据通过json (利用json.cn)转换成Python的数据类型的字典(preview)。 然后通过key-value形式找到 每张图片的url
也可以通过正则(对(response)数据直接进行解析) 
murl: "https://imgsa.baidu.com/forum/wh%3D321%2C200/sign=14a3fa55828ba61edfbbc02c7305bb38/4c53ca8065380cd734b55e72a144ad34588281b0.jpg"
("murl":"(.*?)")2 实现逻辑(具体的一些细节)
​
通过结果发现呢? 图片的数量少了 有可能是服务器发了多次请求。所以这个时候我们就想到了 会不会还有一些数据接口呢?
我们继续往下拖动图片的过程当中 发现又出现了2个数据接口
​
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=40&pe=79&wall_type=h&_=1620823519114
​
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=79&pe=118&wall_type=h&_=1620823534332
​
得出规律
ps=1 ps=40 ps=79   pe=40 pe=79 pe=118   规律 39
for i in range(1,80,39):
    print(i)
​
总结:
1 先确定要爬取的数据是否在网页的源码当中
如果在正常的取请求,如果不在要通过Network 分析真实的数据接口(数据包、name、URL)
​
2 在确定好数据接口之后 像目标的url发起请求 获取响应
​
3 正常的用 比较合适的技术去解析数据
如果数据数量不对。然后继续往下拖动拖动条 找到相似的数据包 进行分析解决
补充: 具体情况具体分析

付コード
テクニック:
response (htmlソースコード)性の悪いを見る時、参考できる検査や(response)データを

import requests
import re
import time
'''

https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466

https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=40&pe=79&wall_type=h&_=1620823519114

https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=79&pe=118&wall_type=h&_=1620823534332

ps=1 ps=40 ps=79   pe=40 pe=79 pe=118   规律 39

'''
name = 1
for i in range(1,80,39):


    # 目标url
    # url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466'
    url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&' + '&ps=' + str(i) + '&pe=' + str(39 + i) + '&wall_type=h&_=1620823534332'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
    }

    res = requests.get(url,headers=headers)
    # print(res.text)
    # 正则表达式匹配数据
    img_urls = re.findall('"murl":"(.*?)"',res.text)

    for img_url in img_urls:
        img_response = requests.get(img_url)
        # 保存数据
        print('正在下载第%d张图片' % name)
        with open('img/%d.jpg'%name,'wb') as file_obj:
            # time.sleep(0.5)
            file_obj.write(img_response.content)

        name += 1
    time.sleep(1)

四、Selenium+chromedriver

4.2 selenium急速に入門

from selenium import webdriver
import time
driver = webdriver.Chrome()

# 加载百度 咋学习呀?通过简单的源码分析 发现了这个方法的区别

driver.get('https://www.baidu.com/')

time.sleep(2)
driver.maximize_window()
time.sleep(1)
# 关闭窗口(当前窗口)
driver.close()

time.sleep(2)
# 退出驱动(关闭所有的窗口)
driver.quit()
ソースネットワーク 戻る