最近看了些关于爬虫的视频,根据视频的代码来找其他的一些网站试试水,代码写好后运行发现没报错但是也没有抓到图片,代码如下:
import requests
import re
import time
import os
"""Web Requests"""
def getOnePage(n):
html = f'http://www.win4000.com/wallpaper_detail_167506_{n}.html'
response = requests.get(html)
return response.text
"""Content Traverse"""
def parse(html):
url = re.findall('<img class=".*?" src="(.*?)" alt=".*?" title=".*?"/>',html)
print(url)
return url
"""Save Pictures"""
def save2pic(url):
pic_name = url.split('/')[-1]
with open(pic_name, 'wb') as f:
f.write(url.content)
def run():
for n in range(1,10):
html = getOnePage(n)
items = parse(html)
for item in items:
save2pic(item)
if "__name__" == "__main__":
run()
自我感觉问题是在保存数据目录这里,还有 parse 函数可能也有问题,因为没有显示 print 的数据。
希望各位前辈指导下,感激不尽!
还有一个小问题,是关于使用 xpath 抓取 url 如何写呢,视频中的写法是:
html = etree.HTML(text)
names = html.xpath('')
其中的 HTML 是一个固定用法吗?这样做变成了一个列表,会影响后续 url 提取到图片吗?
问题可能很小白,但是还是希望各位大大能给些意见,再次感谢!
1
crella 2020-04-12 00:16:53 +08:00
你只是从网页里获取到图片的地址,并没有添加“把图片下载下来”的过程啊
|
3
crella 2020-04-12 00:28:04 +08:00
"""Save Pictures"""
def save2pic(url): (1 个 tab)pic_name = url.split('/')[-1] # 把 url 中图片的真实文件名 fn 提取出来 (1 个 tab)with open(pic_name, 'wb') as f: # 在本地创建一个文件,文件名为 fn,按二进制模式覆盖写入,句柄为 f (2 个 tab)f.write(url.content) # f 句柄写入 url 的内容 那么 url 到底是指"http://website.com/1.jpg"这个文本还是指 1.jpg 的内容呢? 你上一步是怎么处理的? 我不懂编程的,仅供参考 |
4
gwy15 2020-04-12 00:31:08 +08:00 via Android
__name__不加引号……
|
5
gwy15 2020-04-12 00:37:50 +08:00 via Android
1.上面说的问题,你根本就没进到主函数里面。
2.写注释是好习惯,但是 py 的 docstring 是写在 def 下面第一行。 3.parse 返回的是 findall 结果(一个 list of str ),你处理的过程是直接把 str.content 写进去了。这里也得用 requests 先 get 。 |
6
jeblur OP @crella 我的理解是这个 url 是由 parse 函数分离并送过来图片真实 url,所以原因是因为无法从 url 直接到文件?还需要中间再转一层?
|
8
cdlnls 2020-04-12 01:31:09 +08:00 via iPhone
gey15 说的没错 ,if "__name__" == "__main__",这里__name__不加引号。这里错了,后面的 run()也不会运行,自然也没有后面的 print(url)。
|