煎蛋爬虫,终于搞定了,没有了 403 forbidden,基本上就是基于 小甲鱼老师 的代码
本帖最后由 Daniel_Zhang 于 2021-2-9 15:00 编辑import urllib.request as u_request
import os, re, base64, requests
header ={}
header['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
def url_open(url):
html = requests.get(url, headers=header).text
return html
def find_images(url):
html = url_open(url)
m = r'<img src="([^"]+\.jpg)"'
match = re.findall(m, html)
for each in range(len(match)):
match = 'http:' + match
print(match)
return match
def save_images(folder, img_addrs):
for each in img_addrs:
try:
req = u_request.Request(each, headers = header)
response = u_request.urlopen(req)
cat_image = response.read()
filename = each.split('/')[-1]
with open(filename,'wb') as f:
f.write(cat_image)
#print(each)
except OSError as error:
print(error)
continue
except ValueError as error:
print(error)
continue
def web_link_encode(url, folder):
for i in range(180,200):
string_date = '20201216-'
string_date += str(i)
string_date = string_date.encode('utf-8')
str_base64 = base64.b64encode(string_date)
page_url = url + str_base64.decode() + '=#comments'
print(page_url)
img_addrs = find_images(page_url)
save_images(folder, img_addrs)
def download_the_graph(url):
folder = 'graph'
os.mkdir(folder)
os.chdir(folder)
web_link_encode(url, folder)
if __name__ == '__main__':
url = 'http://jandan.net/pic/'
download_the_graph(url) Daniel_Zhang 发表于 2020-12-16 23:59
第9行那里是 req
另外,现在的煎蛋进行了反爬虫设置,图片的标号进行了 base64 加密。图片的 image_addr ...
这里是2021年3月26日运行成功的最新代码,是楼主代码的更新
import urllib.request as u_request
import os, re, base64
import requests
import time
header ={}
header['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
def url_open(url):
html = requests.get(url, headers=header).text
return html
def find_images(url):
html = url_open(url)
m = r'<img src="([^"]+\.jpg)"'
match = re.findall(m, html)
for each in range(len(match)):
match = 'http:' + match
print(match)
return match
def save_images(folder, img_addrs):
for each in img_addrs:
try:
req = u_request.Request(each, headers = header)
response = u_request.urlopen(req)
cat_image = response.read()
filename = each.split('/')[-1]
with open(filename,'wb') as f:
f.write(cat_image)
#print(each)
except OSError as error:
print(error)
continue
except ValueError as error:
print(error)
continue
def web_link_encode(url, folder):
for i in range(1,105):
string_date = '20210325-'
string_date += str(i)
string_date = string_date.encode('utf-8')
str_base64 = base64.b64encode(string_date)
page_url = url + str_base64.decode() + '=#comments'
print(page_url)
img_addrs = find_images(page_url)
save_images(folder, img_addrs)
time.sleep(2)
def download_the_graph(url):
folder = 'graph'
os.mkdir(folder)
os.chdir(folder)
web_link_encode(url, folder)
if __name__ == '__main__':
url = 'http://jandan.net/girl/'
download_the_graph(url)
第9行那里是 req
另外,现在的煎蛋进行了反爬虫设置,图片的标号进行了 base64 加密。图片的 image_addr 也被去掉了 'http:' 的开头 学习了,终于找到了 感谢,昨天找了一整天没解决唉 空白的天 发表于 2021-1-12 09:49
感谢,昨天找了一整天没解决唉
注意最后几行的那个string_date,煎蛋那个好像是按照日期加数字的形式进行图片编号的。所以我此处的还不是很完善,理论上是只能获取20201216的图片的,但是这个问题应该是不难调整的,给一个 int 类型的日期作为起始值,for循环每次加一,然后按照月份去计算30 还是 31 天一个月,最后转换日期成 string 类型,别忘了在日期末尾加上横杠{:10_248:} Daniel_Zhang 发表于 2021-1-12 15:20
注意最后几行的那个string_date,煎蛋那个好像是按照日期加数字的形式进行图片编号的。所以我此处的还不是 ...
谢谢,我是新人233,不过大概的能看懂{:10_275:} 空白的天 发表于 2021-1-12 19:55
谢谢,我是新人233,不过大概的能看懂
嗯啊,看懂了就自己动动手呀,多练习,分享到论坛里一起交流{:10_242:} {:5_111:} Daniel_Zhang 发表于 2021-1-12 23:08
嗯啊,看懂了就自己动动手呀,多练习,分享到论坛里一起交流
1 def get_page(url):
html = url_open(url).decode('utf-8')
a = html.find('current-comment-page') + 23
b = html.find(']',a)
return html
page_num = int(get_page(url))
好像没有用了,是不是可以删掉
我把download_the_graph(folder = 'graph', pages=10)函数里的page_num = int(get_page(url))注释掉还可以运行,并且结果一样 洋洋痒 发表于 2021-1-16 02:50
好像没有用了,是不是可以删掉
我把download_the_graph(folder = 'graph', pages=10)函数里的page ...
那有可能它本来就是 int 类型的,不需要转 int 吧~{:10_285:} Daniel_Zhang 发表于 2021-1-16 16:36
那有可能它本来就是 int 类型的,不需要转 int 吧~
{:10_285:}我的意思是说…………你整个download_the_graph(folder = 'graph', pages=10)函数里没有用到get_page(url)
所以def get_page(url):
html = url_open(url).decode('utf-8')
a = html.find('current-comment-page') + 23
b = html.find(']',a)
return html
和page_num = int(get_page(url))可以删掉
洋洋痒 发表于 2021-1-16 23:07
我的意思是说…………你整个download_the_graph(folder = 'graph', pages=10)函数里没有用到ge ...
昂,好像是这么个道理。那个是因为之前煎蛋它是有一个翻页按钮的好像?
我这个就不需要获取那个的信息了,直接在url里面修改页面?不太记得了
反正这个是用来改第几页第几页的
仔细看了一下,确实可以去除,谢谢指正啦~{:10_248:} def web_link_encode(url, folder):
for i in range(180,200):
string_date = '20201216-'
string_date += str(i)
string_date = string_date.encode('utf-8')
str_base64 = base64.b64encode(string_date)
page_url = url + str_base64.decode() + '=#comments'
print(page_url)
img_addrs = find_images(page_url)
save_images(folder, img_addrs)
大大 为什么这里是range(180,200)
什么意思 柒s 发表于 2021-3-21 11:23
大大 为什么这里是range(180,200)
什么意思
你可以单独研究一下 jiandan 网址的加密解密 encode decode base64
具体是什么原因做 180 - 200 我不太记得了,你可以尝试改成其他数据
应该是一个翻页用的数字,页码什么的
NULL
本帖最后由 alwonwang 于 2021-3-29 16:05 编辑嘿嘿删掉,重复了 柒s 发表于 2021-3-21 11:23
大大 为什么这里是range(180,200)
什么意思
这里的180-200指的是要爬取的页面范围
煎蛋网定期会对图片进行封存,所以页面范围也会有所变化
页:
[1]