首先使用python写爬虫需要用到什么?
首当其冲的就需要安装python,我使用的3.7版,截止写这篇文章时python最新版本是3.8.3,可以在官网下载:https://www.python.org/,
安装步骤按照可视化窗口下一步即可,安装完成打开cmd 输入 python -V查看出现版本号说明安装成功,如果提示不是内部命令则需配置环境变量。
如何配置环境变量可以自行百度,简单说三步:
1、打开电脑属性
2、 打开高级系统设置-高级-环境变量(如果没看到请细细查找)
3、path添加python安装路径(路径截止到包含ptyhon.exe)
安装完成之后使用pip(python包管理工具)同样cmd 输入 pip -V即可查看版本号;
接下来安装4个工具分别是:
jupyter(代码编写工具)
requests(http请求工具)
lxml(解析网页结构数据)
beautifulsoup(网页文档解析工具)
国内镜像地址:https://pypi.douban.com/simple
pip install jupyter https://pypi.douban.com/simple
pip install requests https://pypi.douban.com/simple
pip install lxml https://pypi.douban.com/simple
pip isntall bs4 https://pypi.douban.com/simple
#bs4是beautifulsoup第四版本
安装完成之后打开cmd 输入 jupyter notebook 打开jupyter即可编辑python命令(前提是已绑定默认浏览器),未绑定可以复制cmd打印出来的url进行访问,点击new选择python新建编辑代码,为了更好理解代码可以先看一看python开发文档;
完成之后,思考一下爬虫的思路:
1、确定爬取目标 比如豆瓣https://movie.douban.com/cinema/later/beijing/
2、获取页面html
3、解析网页(html)结构数据
4、解析网页文档
接下来编写代码
import requests;
import lxml;
from bs4 import BeautifulSoup
url = "https://movie.douban.com/cinema/later/beijing/";
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
}
res=requests.get(url,headers=header);
soup = BeautifulSoup(res.content.decode('utf-8'), 'lxml')
# soup = BeautifulSoup(res.content.decode("utf-8"),"lxml")
# print(soup)
all_movies = soup.find("div",id="showing-soon")
# all_movies = soup.find("div",id="showing-soon")
# 初始化BeautifulSoup方法二:手动指定解析编码解析网页
# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')
# print(all_movies)
html_file = open('data1.html', 'w', encoding="utf-8")
# print(all_movies)
file_html=open("data.html","w",encoding="utf-8")
file_html.write("""
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>豆瓣电影即将上映影片信息</title>
<link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h2 class="text-center">豆瓣电影即将上映影片信息</h2>
<table class="table table-striped table-hover mx-auto text-center">
<thead>
<tr>
<th>影片名</th>
<th>上映日期</th>
<th>影片类型</th>
<th>地区</th>
<th>关注者数量</th>
</tr>
</thead>
<tbody>
""")
for each_movie in all_movies.find_all('div', class_="item"): # 从最大的div里面找到影片的div
# print(each_movie) # 输出每个影片div的内容
all_a_tag = each_movie.find_all('a')
all_li_tag = each_movie.find_all('li')
movie_name = all_a_tag[1].text
moive_href = all_a_tag[1]['href']
movie_date = all_li_tag[0].text
movie_type = all_li_tag[1].text
movie_area = all_li_tag[2].text
# 替换字符串里面的 想看 两个字为空,使得更加美观
movie_lovers = all_li_tag[3].text.replace("想看", '')
# print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
# movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))
file_html.write("""
<tr>
<td><a href="{}">{}</a></td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
</tr>
""".format(moive_href, movie_name, movie_date, movie_type, movie_area, movie_lovers))
file_html.write("""
</tbody>
</table>
</body>
</html>
""")
file_html.close()
print("write_finished!")
python file(文件)方法:
open()用于打开一个文档并返回文件对象,上边用到三个参数:file和mode,encoding
file必填,文件相对路径和绝对路径,
encoding:通常使用utf8
mode:
w:打开一个文件只用于写入,如果该文件已经存在,则打开文件并从头开始写入,原有内容被删除,如果不存在则创建新文件,
r:只读方式打开文件,
b:二进制
rb:以二进制方式打开文件用于只读,
+:打开一个文件用于更新
a:打开一个文件用于追加,指针在文件最后