前阵子开始学习python,刚接触爬虫不久,参考其它csdn博客大神的文章简单做了一个demo
# python3中用urllib.request表示python2中的urllib2
import urllib.request as urllib2
# 运用正则表达式
import re
# urlparse
import urllib.parse as urlparse
# 使用第三方模块,使用BeautifulSoup
from bs4 import BeautifulSoup as bs
# 请求的url中文解决
from urllib.parse import quote
import string
# 网页出现错误的模块
from urllib.error import URLError,HTTPError,ContentTooShortError
# 存储爬取的数据
data={}
# 爬取的url
urls={}
# 下载url
def download(url):
print("download..."+url)
# 对url错误作异常处理
try:
html= urllib2.urlopen(url)
except(URLError,HTTPError,ContentTooShortError) as e:
print("download error:"+e.reason)
html=None
return html
# 解析拿到的url
def parser_html(url,response):
soup = bs(response, 'html.parser')
return soup
# 打印出信息
def out_information(soup):
try:
# 打印出title标签的内容
data['title']=soup.title.string
summary_node = soup.find('div', class_="lemma-summary")
data['summary']=summary_node.get_text()
print('爬取的标题:'+data['title'])
print('爬取的内容:')
print(data['summary'])
except:
print('无法获取内容')
def get_new_urls(page_url, soup):
# 存放从入口页面拿到的url集合
new_urls = set()
count=1
# 正则匹配所有/item/链接
links = soup.find_all('a', href=re.compile(r"/item/"))
for link in links:
# 控制数量,需要手动作更改,这里为了使爬取一百条,将count改到了119
# 手动控制的,具体的原因还不清楚
if(count<119):
new_url = link['href']
#urljoin 函数可以将new_url 按page_url 的格式拼接成一个全新的url
new_full_url = urlparse.urljoin(page_url,new_url)
new_urls.add(new_full_url)
# 每拼接完一个页面就加1
count=count+1
return new_urls
# 程序入口,注意是双下划线
if __name__=="__main__":
# 记录页面数
count = 1
# 爬虫入口页面
url = "https://baike.baidu.com/item/%E8%8B%B1%E8%AF%AD/109997"
# 下载url
response=download(url)
# 解析网页
soup=parser_html(url,response)
# 打印内容
out_information(soup)
# 获取需要爬取的url集合
urls=get_new_urls(url,soup)
print(urls)
for url in urls:
# 将页面数转换为字符串形式
srt_count = str(count)
print('爬取第' + srt_count + '个页面:')
# 下载url
response = download(url)
# 解析网页
soup = parser_html(url, response)
# 打印内容
out_information(soup)
# 爬完一个页面就加一
count=count+1
每天进步一点点,开心也多一点点