虽然我不会python语言,但是我会点java,而且还有度娘。
用一门语言开发,首先肯定要配环境,于是度了一下发现有python2和python3。当然是选择高版本的开发。
百度python3的window安装教程,找到了https://blog.youkuaiyun.com/weixin_40844416/article/details/80889165这个博客。
下载了3.6版本,照着步骤安装成功。迫不及待打开cmd验证
当然在此之前你得先配置好环境变量。
环境配好了,先写个hello world试试。
成功了。
用黑框写代码效率太低,也不是我的风格。于是百度python开发工具。
发现PyCharm还不错。教程:https://blog.youkuaiyun.com/pdcfighting/article/details/80297499
跟着教程走就是好。安装成功,是个好软件当然要激活,于是搜索PyCharm激活码:
https://blog.youkuaiyun.com/nobleman__/article/details/85730001
我用第三个激活成功的。
有了工具,写起代码来就事半功倍了。
这个时候就不能着急了,你要是直接去百度Python写个爬虫,当然快。但是只是个代码搬运工,没什么用,你也看不懂。
那就先来个菜鸟教程压压惊吧http://www.runoob.com/python3/python3-basic-syntax.html
我就先花点时间熟悉熟悉语法,然后再接着写。
------------------------------------------------分割线-------------------------------------------------------------------------------------
简单的学了几天python的语法,发现语言的共通性还是比较大,java中的一些语法和数据结构也是适用于python的,话不多说,开始写爬虫吧。
打开PyCharm新建一个Test项目,新建一个reptile.py文件,导入用于访问网络的request模块
from urllib import request
#你要爬的网站,这里是我随便找的一个,你也可以随便找
url = 'http://www.chinagas.org.cn/hangye/news/2019-03-18/45396.html'
#创建request
my_request = request.Request(url)
#读取网页数据
html = request.urlopen(my_request).read()
#打印
print(html)
这样就轻松爬取了网页中的数据,但是这样疯狂的爬取容易被封IP,所以我们要request更换头部,常用的方式就是创建一个头部list,然后每次访问的时候随机从list中获取出来放进头部。
from urllib import request
#引入随机函数模块
import random
#这个list是我百度来的
ua_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]
#爬取的网页
url = 'http://www.chinagas.org.cn/hangye/news/2019-03-18/45396.html'
#随机获取请求头
my_agent = random.choice(ua_list)
#创建request
my_request = request.Request(url)
#添加请求头
my_request.add_header("User-Agent", my_agent)
#读取网页数据
html = request.urlopen(my_request).read()
#打印
print(html)
上面的代码中,我引入一个随机函数的模块Random。
我们发现打印出来的东西是一个html字符串,这肯定不是我们想要,我们想要的是里面的去掉标签的内容;于是又百度Python解析html。找到了bs下的BeautifulSoup模块可以实现。
在安装的时候我发现我的pip命令没有用,百度一下发现Python3.6是自带这个命令的,所以肯定是没有配置环境变量,于是在Python的安装路径下找到pip.exe文件,并且复制路径粘贴到环境变量中,配置好后,执行:pip install BeautifulSoup
安装完成,在引入的时候发现爆红了,再百度,原来是工具还没给配置。你需要:https://www.cnblogs.com/thisyan/p/9671696.html
完成后红线消失,你可以继续写代码了
#引入soup命名为bs
from bs4 import BeautifulSoup as bs
#创建解析方法
def parse_html(html):
#创建soup,参数1:html字符串 参数2:模式
soup = bs(html, 'html.parser')
#获取html中的所有标签中的字符串
my_text = soup.get_text()
#找到所有的p标签中的字符串,返回一个list
p_list = soup.find_all('p')
#遍历list将文字拼接在一起
p_str = ''
for p in p_list:
p_str = p_str + p.get_text()
print(p_str)
print(my_text)
这下我们拿到了想要的东西,我们肯定的马上存下来,一遍为自己所有。
我们可以创建一个本地txt文件用于存储爬下的数据
def write_page(my_text, filename):
print('正在保存', filename)
#文件名编码
hot = filename.encode('utf8')
#创建文件并写入文本
with open(hot, 'w', encoding='utf-8') as f:
f.write(my_text)
f.close()
#打印分割线
print('-,-'*30)
至此简单的爬爬虫就写好了,后续要写个定时任务来执行,还有很多地方要优化。最后贴一下整个python文件
from urllib import request
import random
from bs4 import BeautifulSoup as bs
ua_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]
def parse_html(html):
soup = bs(html, 'html.parser')
my_text = soup.get_text()
p_list = soup.find_all('p')
p_str = ''
for p in p_list:
p_str = p_str + p.get_text()
write_page(p_str, 'first_text.txt')
def write_page(my_text, filename):
print('正在保存', filename)
hot = filename.encode('utf8')
with open(hot, 'w', encoding='utf-8') as f:
f.write(my_text)
f.close()
print('-,-'*30)
def find_html():
url = 'http://www.chinagas.org.cn/hangye/news/2019-03-18/45396.html'
my_agent = random.choice(ua_list)
my_request = request.Request(url)
my_request.add_header("User-Agent", my_agent)
html = request.urlopen(my_request).read()
print(html)
parse_html(html)
#入口函数
if __name__ == '__main__':
find_html()