文件下载
1 | 抛出一个问题: |
在python中可以引入 urlretrieve 进行文件的直接下载,在下载之前找到链接是必须的,这就要使用之前的 find 函数了。1
2
3
4
5
6
7
8
9
10
11from urllib.request import urlopen
from urllib.request import urlretrieve
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/")
bsObject = BeautifulSoup(html, "html.parser")
b = bsObject.find("a", {"id": "logo"})
img = b.find("img")
location = img["src"]
print(location)
urlretrieve(location, "logo.jpg")
用爬虫下载文件会使你的电脑处于危险的环境当中,因为不知道下载的文件是否恶意软件。
如果不能确定下载的文件是否安全,请不要轻易尝试这个.py脚本。
以csv格式存储
csv,Comma-Separated Values,逗号分隔值,是存储表格数据的常用格式,如:1
2
3
4fruit,cost
apple,1.00
banana,0.30
pear,1.25
参考以下代码,如何将数据写入到csv格式文件中:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 这边在引入的时候要注意,千万不要引入 python3 框架中的模块
import _csv as csv
# import os
path = "./csv/test.csv"
# if not os.path.exists(path):
# os.mkdir(path)
with open(path, 'w+') as csvFile:
try:
writer = csv.writer(csvFile)
writer.writerow(('number', 'number plus 2', 'number times 2'))
for i in range(10):
writer.writerow((i, i+2, i*2))
finally:
csvFile.close()
python 中新建文件的机制考虑的非常周到,如果文件不存在则会创建。然后注意引入代码上面的注释,python3 框架中也存在csv模块,应该引入内置申明中的包。
csv 的数据形式和html中的表格数据展示相似,所以一般用来存储爬取到的表格中的数据。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import _csv as csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://en.wikipedia.org/wiki/Comparison_of_text_editors")
bsObj = BeautifulSoup(html, "html.parser")
# 获取页面上的第一个表格
table = bsObj.find_all("table", {"class": "wikitable"})[0]
# print(table)
rows = table.find_all("tr")
# print(rows)
path = "./csv/table.csv"
with open(path, "wt", newline="", encoding="utf-8") as csvFile:
writer = csv.writer(csvFile)
try:
for row in rows:
csvRow = []
for cell in row.find_all({"td", "th"}):
csvRow.append(cell.get_text())
writer.writerow(csvRow)
finally:
csvFile.close()
mysql整合
之所以需要mysql,因为爬取的数据不能光在内存中处理,还需要进行持久化处理。因为我们可能需要将数据进行展示或者进行后一步的处理。
关于mysql的下载,自行google。
macOS系统 可以使用 brew install mysql命令下载。
这里使用 pymysql 这个第三方工具整合 mysql ,可以使用pip进行下载。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import pymysql
# 打开数据库
db = pymysql.connect("localhost", "root", None, "wyc")
# 创建游标
cursor = db.cursor()
# 执行sql语句
cursor.execute("select version()")
# 打印信息
print(cursor.fetchone())
# 关闭数据库
db.close()
这段程序有两个对象:连接对象(conn )和光标对象(cur ),一个连接可以有很多个光标。一个光标跟踪一种状态 (state)信息,用完光标和连接之后,千万记得把它们关闭。如果不关闭就会导致连接泄漏 (connection leak)。