需求工程python爬虫时遇到的一系列问题及解决

今天完成了python爬虫作业,但并不是一帆风顺,在写的过程中还是遇到了很多问题:
#基本问题

  1. 关于包的引入,python的确是个非常灵活的语言,主要体现在他强大的包上,要实现某个功能,基本上调用几个包就能实现一些用传统语言编写很麻烦的功能,非常方便。
  2. 关于python的编码,我用的是pycharm,感觉编码方式的调整很奇怪,我用utf-8竟然识别不了中文,希望大佬指点,个人也没去深究,因为已经有了一些解决方案,在文件的第一句加入# -- coding: yourcode --,就可以改变这个文件的编码方式
  3. 在coding过程中,最后做词云分析和数据可视化展示的时候,碰到了一些常见的问题,一开始是导入wordcloud包不成功,因为我是在pycharm中的终端里输入的命令,我点自动提示里的install也没用,下不了,最后我直接打开windows的cmd,输入pip install wordcloud,没想到直接配置好了,速度还贼快,惊喜,而且还给我自动配置了其他配套的模块,属实惊喜
  4. 词云分析和可视化展示的第二个问题是字体的问题,因为wordcloud词云分析默认字体是不支持中文的,得自己去找中文字体,不过还好我们电脑本身就有支持中文的字体,名称是simhei.ttf,直接win+r,然后输入fonts,然后找到这个字体,复制他的完整路径即可,不然输出的图片上没有文字,只有小框框,当然你也可以自己去找其他支持中文的字体,我只是为了偷懒而已
  5. 成果图,一个小作业而已,没细搞
    在这里插入图片描述

下面展示一些源代码:

爬取相关链接:

// bug.py
// An highlighted block
# -*- coding: gbk -*-
import requests
import re
from urllib.parse import quote
from bs4 import BeautifulSoup

#爬取各大城市本地宝链接
def getRes(city_url_list):
	#对网页发送请求
	url = "http://m.bendibao.com/city.php"
	html = requests.get(url = url)
	html.encoding = 'gbk2312'
	soup = BeautifulSoup(html.text,"html.parser")
	soup = soup.find_all("a")
	city_all_list = {}
	#首先爬取所有城市的链接,保存到字典city_all_list中
	for i in soup:
		if i.has_attr('href'):
			city_all_list[i.text] = i["href"]

	extraStr = ['移动版','电脑版','意见建议']

	#保存字典里所有城市及链接到txt
	file = open("AllCIties.txt","w+")
	for i in city_all_list.keys():
		s = str(i) + " " + str(city_all_list[i])
		if (str(i) < 'A' or str(i) > 'Z' and str(i) not in extraStr):
			file.write(s+'\n')

	#关闭文件
	file.close()

	#一线城市列表
	city_name_list = ["北京","上海","广州",
	"成都","杭州","重庆","西安","苏州",
	"武汉","南京","天津","郑州","长沙",
	"东莞","佛山","青岛","沈阳"]

	#只保留各大城市url
	for city in city_name_list:
		city_url_list.append(city_all_list[city])
	print("人才落户各大城市链接:")
	for city in city_url_list:
		print(city)
	saveFile("CitiesList.txt",city_url_list)

#爬取各城市本地宝搜索链接
def query(city_url_list):

	#存放搜索链接
	query_url_list = []
	n = 0
	#分别对各城市的本地宝链接进行请求,以获取搜索链接
	print("各城市本地宝搜索url:")
	for i in city_url_list:
		html = requests.get(url = i)
		soup = BeautifulSoup(html.text,"html.parser")
		soup = soup.select(".search")
		queryKey = quote("人才落户最新")
		query = soup[0]["href"]
		#拼接搜索关键词
		query_url = query.split("?")[0] + "?q="+ queryKey + "&click=1&" + query.split("?")[1] + "&nsid="
		query_url_list.append(query_url + '\n')
		print(query_url_list[n])
		n += 1

	saveFile("Cities_search_list.txt",query_url_list)
	return query_url_list

#获取详情页链接
def title(query_url_list):

	#各城市人才落户政策文章链接列表
	title_url_list = []
	n = 0
	#通过之前拼接的搜索url来爬取各地城市人才落户最新文章
	for i in query_url_list:
		html = requests.get(url = i)
		soup = BeautifulSoup(html.text,"html.parser")
		#匹配时加入了属性
		soup = soup.select('.c-title a[cpos="title"]')
		titleurl = soup[0]["href"]
		title_url_list.append(titleurl + '\n')
		print(title_url_list[n])
		n += 1
	saveFile("TitleUrlList.txt",title_url_list)


#保存文件
def saveFile(filename,text):
    f = open(filename, 'w',encoding = 'utf-8')
    for t in text:
        if len(t) > 0:
            f.writelines(t + "\n")
    f.close()

def main():
	city_url_list = []  # 最终所有一线城市落户链列表
	getRes(city_url_list)
	query_url_list = query(city_url_list)
	title(query_url_list)
main()

将政策具体内容爬取到本地txt文件,并进行数据清洗

 //writting.py
// An highlighted block
from bs4 import BeautifulSoup
import requests

page = requests.get(url = 'http://wh.bendibao.com/live/202078/113158.shtm')
page.encoding = 'GBK2312'
soup = BeautifulSoup(page.text,'html.parser')

fp = open('./武汉人才引进政策.txt','a',encoding='utf-8')
result = soup.find_all(attrs={'class':'title daoyu'})
result = soup.select('div > h1 > strong')

fp.writelines(result[0].text+'\n')
result = soup.find_all(class_='time')

fp.writelines(result[0].text+'\n')

result = soup.select('.content')
soup = BeautifulSoup(str(result[0]),'html.parser')

i = soup.find('p')

fp.writelines(i.text+'\n')
for i in soup.p.next_siblings:
    if i.name == 'div':
        break

    fp.writelines(i.text+'\n')
    s = i.find('a')
    if s != None:

        fp.writelines(s['href']+'\n')
fp.close()

词云展示 DataShow.py

// A code block
var foo = 'bar';
// An highlighted block
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba.analyse
import re
#读取爬虫保存下载的数据
file_text = open('武汉人才引进政策.txt', 'r',encoding='utf-8').read()
#使用jieba来处理剪切我们爬取文本内容
cut_text = jieba.lcut(file_text)
#以空格分隔cut_text
df = ' '.join(cut_text)
#提取关键词
tags = jieba.analyse.extract_tags(df, topK=50)
#关键词结果
result = ' '.join(tags)
#使用词云进行数据可视化
wc_cloud = WordCloud(
    font_path='C:\Windows\Fonts\simhei.ttf',    #字体的路径,使用支持中文的simfei.tff字体
    background_color='white',   #背景颜色
    width=1200,
    height=600,
    max_font_size=150,  #字体的大小
    min_font_size=30,   #字体的大小
    max_words=10000
)
#生成词云
wc_cloud.generate(result)
wc_cloud.to_file('result.png')     #图片保存

#图片展示
plt.figure('result_img') #图片显示的名字
plt.title('wuhan')
plt.imshow(wc_cloud)
plt.axis('off')
plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值