1.打开任意一位Instagram用户的首页,这里以https://www.instagram.com/melissamale/
为例,对任意一张图片进行检查,没有发现图片链接,
2.打开图片所在页面,对图片进行检查,发现两个div
都指向了该图片,在其中一个div
中找到了图片的地址,
3.复制找到的图片地址,回到用户首页,查看页面的源代码,查找链接找到了一个display_url
节点,
4.搜索display_url
节点,找到了十来个,对应的地址打开后均是图片,并且这些都包含在js
脚本中
5.其中的脚本很像json
数据,校验之后,确实是json
数据,这样就可以利用python
中的json
库提取相应的节点
6.下面的Python
代码将对首页的html
源码中的图片链接数据进行提取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
import requests import json from lxml import etree import click import os
BASE_URL = "https://www.instagram.com/melissamale/"
path_dir = "C:/Users/xxx/Desktop/intagrsm_img"
proxies = { 'https': 'https://127.0.0.1:38251' }
headers = {"Referer": "https://www.instagram.com/urnotchrislee/?hl=zh-cn", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
img_list = []
def download_file(file_url, path): filename = file_url.split("/")[-1] response = requests.get(file_url, headers=headers, proxies=proxies) fb = open(path + '/' + filename, 'wb') fb.write(response.content) fb.close()
def crawl(): click.echo('start')
if not os.path.exists(path_dir): os.makedirs(path_dir)
try: res = requests.get(BASE_URL, headers=headers, proxies=proxies) html = etree.HTML(res.content.decode())
all_script_tags = html.xpath('//body/script[@type="text/javascript"]/text()')
for script_tag in all_script_tags: if script_tag.strip().startswith(''): data = script_tag.replace('window._sharedData = ', '')[ :-1] json_data = json.loads(data, encoding='utf-8') edges = json_data['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media'][ 'edges'] for edge in edges: img_url = edge['node']['display_url'] img_list.append(img_url) print(edge['node']['display_url']) download_file(img_url, path_dir) break click.echo('success')
except Exception as e: raise e
if __name__ == '__main__': crawl()
|
以上内容参照下面的文章一本正经的胡说八道着:
Python之Instagram图片爬虫(一)
【python爬虫】动态加载页面的解决办法(以ins为例)
纯属小白,大佬轻喷。