gpt4 book ai didi

Python:使用 BeautifulSoup4 的简单网络爬虫

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:49 24 4
gpt4 key购买 nike

我一直在关注 TheNewBoston 的使用 Pycharm 的 Python 3.4 教程,目前正在学习如何创建网络爬虫的教程。我只是想下载XKCD的所有漫画。使用文件看起来非常简单。这是my code ,然后是 TheNewBoston的。每当我运行代码时,什么也没有发生。它运行起来并说:“进程已完成,退出代码为 0”我哪里搞砸了?
TheNewBoston 的教程有点过时,并且用于抓取的网站已更改域。我将评论视频中似乎重要的部分。

我的代码:

mport requests
from urllib import request
from bs4 import BeautifulSoup

def download_img(image_url, page):
name = str(page) + ".jpg"
request.urlretrieve(image_url, name)


def xkcd_spirder(max_pages):
page = 1
while page <= max_pages:
url = r'http://xkcd.com/' + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, "html.parser")
for link in soup.findAll('div', {'img': 'src'}):
href = link.get('href')
print(href)
download_img(href, page)
page += 1

xkcd_spirder(5)

最佳答案

漫画位于id为comic的div中,您只需从img中提取src> 在该 div 内,然后将其连接到 base url,最后请求内容并写入,我使用 basename 作为保存文件的名称。

我还用范围循环替换了您的 while 并仅使用 requests 完成了所有 http 请求:

import requests
from bs4 import BeautifulSoup
from os import path
from urllib.parse import urljoin # python2 -> from urlparse import urljoin


def download_img(image_url, base):
# path.basename(image_url)
# http://imgs.xkcd.com/comics/tree_cropped_(1).jpg -> tree_cropped_(1).jpg -
with open(path.basename(image_url), "wb") as f:
# image_url is a releative path, we have to join to the base
f.write(requests.get(urljoin(base,image_url)).content)


def xkcd_spirder(max_pages):
base = "http://xkcd.com/"
for page in range(1, max_pages + 1):
url = base + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, "html.parser")
# we only want one image
img = soup.select_one("#comic img") # or .find('div',id= 'comic').img
download_img(img["src"], base)

xkcd_spirder(5)

运行代码后,您将看到我们获得前五本漫画。

关于Python:使用 BeautifulSoup4 的简单网络爬虫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com