Python爬虫——第一个小爬虫(经典)修改版

贴吧图片的爬取


一、页面获取

要让python可以进行对网页的访问,那肯定要用到urllib之类的包。So先来个 import urllib.request

由于Python3里的urllib模块已经发生改变,所以要注意此处应该写为import urllib.request,而不是import urllib。

代码如下:

# coding:utf-8
import urllib.request

page = urllib.request.urlopen('http://tieba.baidu.com/p/1753935195') # 打开网页
htmlcode = page.read() # 读取页面源码
htmlcode = htmlcode.decode('utf-8')
print (htmlcode) # 在控制台输出

urllib中有 urllib.request.urlopen(str) 方法用于打开网页并返回一个对象,调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。

运行结果与查看源码其实差不多
运行结果就不放上来了
也可以写到文本文档中:

#coding:utf-8
import urllib.request

page = urllib.request.urlopen('http://tieba.baidu.com/p/1753935195')
htmlcode = page.read()
htmlcode = htmlcode.decode('utf-8')
# print htmlcode

pageFile = open('pageCode.txt','w') # 以写的方式打开pageCode.txt
pageFile.write(htmlcode) # 写入
pageFile.close() # 开了记得关

运行一遍,pageCode.txt就出现在了你的同级目录下

好了别闹,我们把它封装成方法:

def get_html(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    return html

然后我们的页面获取代码就K.O.


二、图片(目标)的提取

做完上面步骤,你打开pageCode.txt一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?

客官别急啊,我这就去给你叫我们的小。。。图片!图片!

首先我们要一个正则表达式 (什么你不会?请看菜鸟入门教程-->GO)

然后我们看源代码,Yeah 我们找到了其中一张图片是这样的

写出图片的正则表达式: reg = r'src="(.+?\.jpg)" width' 

解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" width结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。

接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。

用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表

# coding:utf-8
import urllib.request
import re

def get_html(url):
    page = urllib.request.urlopen(url)
    html = page.read().decode('utf-8')
    return html

reg = r'src="(.+?\.jpg)" width'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配
for img in imglist:
    print (img)

打印出这么多图片链接

光把链接拿出来没用啊,我们的目标是下载下来~

urllib库中有一个 urllib.request.reurlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下

在上面代码循环中加上 urllib.request.urlretrieve(img, 'tieba.jpg') 

卧槽!!!怎么只下了一张

至少它下载了不是?啪啪啪啪啪(掌声)

检查下问题出在哪。。。。

没错我们只给了一个tieba.jpg的名字,后来的把前面的覆盖了。

调整下代码:

# coding:utf-8
import urllib.request
import re

def get_html(url):
    page = urllib.request.urlopen(url)
    html = page.read().decode('utf-8')
    return html

reg = r'src="(.+?\.jpg)" width'
reg_img = re.compile(reg)
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))
x = 0
for img in imglist:
    urllib.request.urlretrieve(img, '%s.jpg' %x)
    x += 1

啪啪啪啪啪

 第一步完成~


三、指定链接抓取

我想要抓另一个帖子,总不能打开源代码,然后把那段地址改了在运行吧。

只是一个小程序,那也不行欸,加一个让用户指定地址的交互。

先把提取图片的那段代码打包下:

def get_image(html_code):
    reg = r'src="(.+?\.jpg)" width'
    reg_img = re.compile(reg)
    img_list = reg_img.findall(html_code)
    x = 0
    for img in img_list:
        urllib.request.urlretrieve(img, '%s.jpg' % x)
        x += 1

最后来个请输入:

print u'请输入url:',
url = raw_input()
if url:
    pass
else:
    url = 'http://tieba.baidu.com/p/1753935195'
html_code = get_html(url)
get_image(html_code)

运行一下,试试另一个帖子:

完美~~


四、交互的添加

虽然写的是一个简单的小程序,但有强迫症的我还是给他加上了交互(不然多难受啊:双击,屏幕一闪,下载完了。。。)

最后的代码:

# coding:utf-8
import urllib.request
import re

from pip._vendor.distlib.compat import raw_input


def get_html(url):
    page = urllib.request.urlopen(url)
    html_code = page.read()
    html_code = html_code.decode('utf-8')
    return html_code

def get_image(html_code):
    reg = r'src="(.+?\.jpg)" width'
    reg_img = re.compile(reg)
    img_list = reg_img.findall(html_code)
    x = 0
    for img in img_list:
        urllib.request.urlretrieve(img, '%s.jpg' % x)
        x += 1

print (u'-------网页图片抓取-------')
print (u'请输入url:')
url = raw_input()
if url:
    pass
else:
    print (u'---没有地址输入正在使用默认地址---')
    url = 'http://tieba.baidu.com/p/1753935195'
print (u'----------正在获取网页---------')
html_code = get_html(url)
print (u'----------正在下载图片---------')
get_image(html_code)
print (u'-----------下载成功-----------')
raw_input('Press Enter to exit')

相对来说比较舒服的交互体验,大功告成~

  • 16
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个简单的 Python 爬虫实现,用于从北京租房信息网站上爬取租房信息并将其导入到 Excel 文件中。 首先,我们需要安装以下 Python 库: - requests:用于发送 HTTP 请求和获取网页内容。 - Beautiful Soup:用于解析 HTML 和 XML 网页内容。 - openpyxl:用于操作 Excel 文件。 可以使用 pip 命令进行安装: ``` pip install requests beautifulsoup4 openpyxl ``` 接下来,我们需要编写 Python 代码: ```python import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 发送 HTTP 请求并获取网页内容 url = 'https://bj.zu.anjuke.com/fangyuan/p1/' response = requests.get(url) html = response.text # 使用 Beautiful Soup 解析网页内容 soup = BeautifulSoup(html, 'html.parser') houses = soup.select('.zu-itemmod') # 创建 Excel 文件并添加表头 wb = Workbook() ws = wb.active ws.append(['标题', '链接', '小区', '面积', '租金']) # 遍历租房信息并将其添加到 Excel 文件中 for house in houses: title = house.select('.zu-info h3 a')[0].text.strip() link = house.select('.zu-info h3 a')[0]['href'] community = house.select('.details-item')[0].text.strip() area = house.select('.details-item')[1].text.strip() price = house.select('.zu-side strong')[0].text.strip() ws.append([title, link, community, area, price]) # 保存 Excel 文件 wb.save('beijing_rent.xlsx') ``` 该爬虫程序将会从北京租房信息网站的第一页开始爬取租房信息,包括标题、链接、小区、面积和租金,并将其添加到 Excel 文件中。你可以根据需要修改代码以实现更多功能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值