鱼C论坛

 找回密码
 立即注册
查看: 2569|回复: 6

[已解决]python爬取煎蛋网妹子图时报错了,好气哦!有哪位大佬可以给小白解答下吗?谢谢!

[复制链接]
发表于 2021-2-9 10:41:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request
import re

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36')
    page = urllib.request.urlopen(req)
    html = page.read().decode('UTF-8')
    return html

def get_img(html):
    p = r'<img src="([^"]+\.jpg)"'
    imglist = re.findall(p,html)

    for each in imglist:
          print(each)

    for each in imglist:
        filename = each.split('/')[-1]
        urllib.request.urlretrieve('http://' + each,filename,None)


if __name__ == '__main__':
    url = 'http://jandan.net/ooxx/MjAyMTAyMDgtOTk=#comments'
    get_img(open_url(url))

报错截图如下:

报错.png

网址是最近煎蛋网上的随手拍那一栏的网址,这里小白先谢过各位鱼油们!谢谢~


最佳答案
2021-2-9 14:58:12
  1. import urllib.request as u_request
  2. import os, re, base64, requests

  3. header ={}
  4. 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'

  5. def url_open(url):

  6.     html = requests.get(url, headers=header).text
  7.     return html

  8. def find_images(url):
  9.     html = url_open(url)

  10.     m = r'<img src="([^"]+\.jpg)"'
  11.     match = re.findall(m, html)

  12.     for each in range(len(match)):
  13.         match[each] = 'http:' + match[each]
  14.         print(match[each])

  15.     return match

  16. def save_images(folder, img_addrs):
  17.     for each in img_addrs:
  18.         try:
  19.             req = u_request.Request(each, headers = header)
  20.             response = u_request.urlopen(req)
  21.             cat_image = response.read()
  22.             filename = each.split('/')[-1]
  23.             with open(filename,'wb') as f:
  24.                 f.write(cat_image)
  25.             #print(each)
  26.         except OSError as error:
  27.             print(error)
  28.             continue
  29.         except ValueError as error:
  30.             print(error)
  31.             continue

  32. def web_link_encode(url, folder):
  33.     for i in range(180,200):
  34.         string_date = '20201216-'
  35.         string_date += str(i)
  36.         string_date = string_date.encode('utf-8')
  37.         str_base64 = base64.b64encode(string_date)
  38.         page_url = url + str_base64.decode() + '=#comments'
  39.         print(page_url)
  40.         img_addrs = find_images(page_url)
  41.         save_images(folder, img_addrs)

  42. def download_the_graph(url):
  43.     folder = 'graph'
  44.     os.mkdir(folder)
  45.     os.chdir(folder)
  46.     web_link_encode(url, folder)

  47. if __name__ == '__main__':
  48.     url = 'http://jandan.net/pic/'
  49.     download_the_graph(url)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 11:47:21 | 显示全部楼层
本帖最后由 Daniel_Zhang 于 2021-2-9 11:49 编辑

我觉得是你这个 url有点问题

我这里直接就 404 not found 了

我自己的代码也是,估计是反爬了,换一个网站吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 12:10:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 14:16:31 | 显示全部楼层
  1. import requests
  2. import re


  3. url = "http://jandan.net/ooxx/MjAyMTAyMDgtOTk=#comments"
  4. headers = {
  5.     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
  6. }
  7. req = requests.get(url, headers=headers).text

  8. p = r'<img src="([^"]+\.jpg)"'
  9. img_list = re.findall(p, req)

  10. print(img_list)
复制代码


这里没问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 14:17:34 | 显示全部楼层
第21行
url双斜杠多了一套,去掉就行了
  1. import urllib.request
  2. import re

  3. def open_url(url):
  4.     req = urllib.request.Request(url)
  5.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36')
  6.     page = urllib.request.urlopen(req)
  7.     html = page.read().decode('UTF-8')
  8.     return html

  9. def get_img(html):
  10.     global imglist
  11.     p = r'<img src="([^"]+\.jpg)"'
  12.     imglist = re.findall(p,html)

  13.     for each in imglist:
  14.           print(each)

  15.     for each in imglist:
  16.         filename = each.split('/')[-1]
  17.         urllib.request.urlretrieve('http:' + each,filename,None)


  18. if __name__ == '__main__':
  19.     url = 'http://jandan.net/ooxx/MjAyMTAyMDgtOTk=#comments'
  20.     get_img(open_url(url))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 14:58:12 | 显示全部楼层    本楼为最佳答案   
  1. import urllib.request as u_request
  2. import os, re, base64, requests

  3. header ={}
  4. 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'

  5. def url_open(url):

  6.     html = requests.get(url, headers=header).text
  7.     return html

  8. def find_images(url):
  9.     html = url_open(url)

  10.     m = r'<img src="([^"]+\.jpg)"'
  11.     match = re.findall(m, html)

  12.     for each in range(len(match)):
  13.         match[each] = 'http:' + match[each]
  14.         print(match[each])

  15.     return match

  16. def save_images(folder, img_addrs):
  17.     for each in img_addrs:
  18.         try:
  19.             req = u_request.Request(each, headers = header)
  20.             response = u_request.urlopen(req)
  21.             cat_image = response.read()
  22.             filename = each.split('/')[-1]
  23.             with open(filename,'wb') as f:
  24.                 f.write(cat_image)
  25.             #print(each)
  26.         except OSError as error:
  27.             print(error)
  28.             continue
  29.         except ValueError as error:
  30.             print(error)
  31.             continue

  32. def web_link_encode(url, folder):
  33.     for i in range(180,200):
  34.         string_date = '20201216-'
  35.         string_date += str(i)
  36.         string_date = string_date.encode('utf-8')
  37.         str_base64 = base64.b64encode(string_date)
  38.         page_url = url + str_base64.decode() + '=#comments'
  39.         print(page_url)
  40.         img_addrs = find_images(page_url)
  41.         save_images(folder, img_addrs)

  42. def download_the_graph(url):
  43.     folder = 'graph'
  44.     os.mkdir(folder)
  45.     os.chdir(folder)
  46.     web_link_encode(url, folder)

  47. if __name__ == '__main__':
  48.     url = 'http://jandan.net/pic/'
  49.     download_the_graph(url)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 15:35:17 | 显示全部楼层
def getit(session, url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
    res = session.get(url, headers=headers)
    xmls = etree.HTML(res.text)
    comments = xmls.xpath("//ol[@class='commentlist']/li/div/div/div[@class='text']/p/img/@src")
    for cm in comments:
        print(cm)
        urlretrieve(url="http:" + cm, filename=cm.split("/")[-1])
    if xmls.xpath("//div[@class='comments']/div[@class='cp-pagenavi']/a[last()]/@href"):
        next = "http:" + xmls.xpath("//div[@class='comments']/div[@class='cp-pagenavi']/a[last()]/@href")[0]
        getit(session, next)


if __name__ == '__main__':
    session = requests.Session()
    start = "http://jandan.net/ooxx/comments"
    getit(session=session, url=start)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 06:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表