Python爬取漫画网站时遇到问题如何解决?

刚自学 python 没多久,语法倒是学了个大概,苦于没有练手的机会,突然想到可以试着爬一些图片过来
试了下 bing 的首页图片,urllib 就可以很简单就下载到本地
然后想试一下漫画网站,试试能不能把整部漫画都下载到本地,现在遇到了几个问题,求前辈们帮忙解答一下
1.我爬的网站是 iimanhua ,想用 urllib 的方式获取,但发现页面的源码不含漫画图片的链接。搜索之后说是有些网站会通过异步 ajax 加载(以前没搞过前端,这块不是很懂)。网上说是可以用 selenium 库,调用 PhantomJS 命令行浏览器。browser=webdriver.PhantomJS()的方法去请求一个页面,现在倒是能把 browser.page_source 整个获取出来。想获取页数、图片地址,但不知道怎么获取特定的某个元素。如果用正则倒是也行,就是有点麻烦,因为看到有类似 browser.find_element_by_xxx 的方法,一些博客上的介绍不是很看得懂,不知道有没有简单的方法获取
Alt text 2.browser.get(url)返回的特别慢。我用火狐去访问的时候发现其他所有东西都在几秒钟之内加载完成了,但唯独有一个 gif 图片是 0x0 大小的,需要加载 1 分多钟,域名还是 baidu 的。怀疑是这个网站针对爬虫有特定保护(?),有没有办法把这个跳过
Alt text


第 1 点的话大不了就用正则去处理整个 page_source ,写得复杂一点总是能获取到图片和总页数的,但第 2 点如果无法解决整个计划就失败了。。。

Python爬取漫画网站时遇到问题如何解决?

13 回复

Headless Chrome
0x0 是百度统计吧


帖子回复:

遇到爬虫问题,先按这个流程排查:

  1. 检查请求头 - 很多网站会验证User-Agent
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'https://漫画网站域名/'
}
response = requests.get(url, headers=headers)
  1. 处理动态加载 - 用Selenium或找真实API
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get(url)
# 等待内容加载
images = driver.find_elements(By.TAG_NAME, 'img')
  1. 处理反爬机制 - 加延迟、用代理
import time
import random

time.sleep(random.uniform(1, 3))  # 随机延迟
  1. 解析问题 - 确认选择器是否正确
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
# 多试几种选择器
img_tags = soup.select('.comic-img') or soup.find_all('img', class_='content')

常见坑点:

  • 图片可能是懒加载(检查data-src属性)
  • 章节数据可能在JS变量里
  • 需要维护会话(用requests.Session())

一句话建议: 先F12看Network面板,找到真实的数据来源再写代码。

问题不在于 PhantomJS 还是 Chrome,而是加载页面慢。不管是 python 版的 PhantomJS 还是界面版本的 firefox 都很慢,估计是慢在一个地方

#2 链接发来看一下

页面里 var qTcms_S_m_murl_e= 的值用 base64 解一下你就能看见你想要的东西了。

厉害呀,我一开始看到这串就直接忽略了。。。。。这样连总页数什么的解析操作都不需要了

#4 你把 qTcms_S_m_murl_e 用 base64 解码就是图片地址,页码可以用$qingtiandy$切割

第二个问题也许能通过配置 chrome_option 解决,设置 block 掉百度那个域名。
可参考: http://blog.csdn.net/zwq912318834/article/details/78933910
https://sites.google.com/a/chromium.org/chromedriver/capabilities

但是我找了很久没找到 block domain 要怎么配置 ×D

看到了,谢啦,第二个问题不知道有没有解法

用 hosts 吗

获得页面之后用 beautifulsoup、lxml 之类的来解析,不一定要正则
先禁止加载图片,获得 URL 之后把你要的图片下载下来
其实最好的办法是执行 js(pyexecjs)要快得多

selenium 会很慢很慢

回到顶部