【python抓站】遇到有关问题。求高人指点
【python抓站】遇到问题。。求高人指点
小弟新学python,想做一个抓站的小程序练一下手。具体来说,就是随便找了一个漫画的网站,然后想能够把某一部漫画完整地抓下来
但是在获取大图片的url时出现了问题。比如下面这个网址
http://comic.131.com/content/16117/187873/3.html
显然,我需要获取最大的那张图的url。对于131这个网站来说,它的漫画的主图片的id叫做ComicBigPic
相关的python代码如下:
然后非常奇怪的是,输出的图片的src居然和在网站上看到的不一样。。输出的是这个:
而原来应该是:http://res6.comic.131.com/ab/f2/bcd0da3723fa0293f33c1ca3d626f8b014b6.jpg 才对
我实在不知道是怎么回事。试过改headers也不行,我对于网站的原理不是很熟悉。难道有什么机制来在爬虫访问的时候修改src??
------解决方案--------------------
我用低版本的chrome也和firefox/ie一样,没有装新版的chrome
------解决方案--------------------
我测试了19张图片,基本没啥问题.
小弟新学python,想做一个抓站的小程序练一下手。具体来说,就是随便找了一个漫画的网站,然后想能够把某一部漫画完整地抓下来
但是在获取大图片的url时出现了问题。比如下面这个网址
http://comic.131.com/content/16117/187873/3.html
显然,我需要获取最大的那张图的url。对于131这个网站来说,它的漫画的主图片的id叫做ComicBigPic
<img id="comicBigPic" src="http://res6.comic.131.com/ab/f2/bcd0da3723fa0293f33c1ca3d626f8b014b6.jpg" alt="魔物娘的(相伴)日常-第10话-少年漫画-オカヤド@乾武丸" oncontextmenu="return false;">
相关的python代码如下:
import html.parser
import urllib.request
class parseEpisode(html.parser.HTMLParser):
def handle_starttag(self,tag,attrs):
if tag == 'img':
istarget = 0
for key,value in attrs:
if key == 'id' and value == 'comicBigPic':
print(attrs)
istarget = 1
if key == 'src' and istarget:
istarget = 0
self.picurl = value
page = parseEpisode()
response = urllib.request.urlopen('http://comic.131.com/content/16117/187873/3.html')
page.feed(response.read().decode('utf-8'))
然后非常奇怪的是,输出的图片的src居然和在网站上看到的不一样。。输出的是这个:
[('id', 'comicBigPic'), ('src', 'http://res.files.131.com/t.gif'), ('alt', '魔物娘的(相伴)日常-第10话-少年漫画-オカヤド@乾武丸'), ('oncontextmenu', 'return false;')]
而原来应该是:http://res6.comic.131.com/ab/f2/bcd0da3723fa0293f33c1ca3d626f8b014b6.jpg 才对
我实在不知道是怎么回事。试过改headers也不行,我对于网站的原理不是很熟悉。难道有什么机制来在爬虫访问的时候修改src??
python
抓站
HTML
爬虫
------解决方案--------------------
我用低版本的chrome也和firefox/ie一样,没有装新版的chrome
------解决方案--------------------
我测试了19张图片,基本没啥问题.
#! /urs/bin/env python
# coding: cp936
import re
import urllib
url = r'http://comic.131.com/content/16117/187873/2.html'
url_base = url[:url.rfind('/')+1]
res_bounds = r'option value="(\d+)"'
res_img = r'id="imgjs".*?img=(http://.*?)"'
def getSource(url):
''' get source of the page '''
page = urllib.urlopen(url)
if page:
return page.read()
else:
return ''
def main():
''' main function '''
page = getSource(url)