爬虫学习-莆田
使用库
- requests
- beautifulsoup4
- pandas
方法步骤
- 定义访问头文件和url
- 获取网页源代码
- 对源代码中的所需部分进行截取
设置基本变量
# url 爬取目标网站,实际没用上
root_url = [
"http://www.ptfish.com/", # 莆田小鱼网
"https://www.0594.com/", # 莆田二手房网
]
# headers 请求头变量,模仿正常人电脑
headers = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
}
定义爬虫函数
1.莆田二手房
def get_house_content(string):
# 定义两个中间变量
mid_dict = {
}
url_list = []
# 因一个网页内有多个标题,页面数量较少,将网址保存到数组url_list中
page = 300
for i in range(page):
url = "https://www.0594.com/list-36-" + str(i) + ".html"
url_list.append(url)
# 对网页的标题信息进行爬取
for i in range(page):
html = requests.get(url_list[i], headers=headers)
soup = BeautifulSoup(html.text, "html.parser")
# 使用bs4的select模块找到对应的标题的代码
tag_center = soup.select(string)
try:
for mid_int in range(11):
# 截取自己想要的属性并保存到字典mid_dict中
dict_name = tag_center[mid_int].attrs["title"]
dict_url = tag_center[mid_int].attrs["href"]
mid_dict[dict_name] = dict_url
except:
pass
return mid_dict
string
为网页对应的属性,通过bs4对页面信息进行选取
2.莆田小鱼网
因需求为爬取信息,不做信息的赘余处理
这里仅按照网页的网址命名规则进行爬取即可
def get_news_content():
# 定义两个中间变量
mid_dict = {
}
url_list = []
# 当前最新的界面
page = 4516
# 将网址进行遍历保存到数组url_list中
for i in range(page-3000, page):
url = "http://www.ptfish.com/thread-231" + str(i) + "-1-1.html"
url_list.append(url)
# 对网页的标题信息进行爬取,执行3000次
for i in range(3000):
try:
html = requests.get(url_list[i], headers=headers)
soup = BeautifulSoup(html.text, "html.parser")
# 使用bs4的select模块找到对应的标题的代码
tag_title = soup.select(".ts > span")
# 截取自己想要的属性并保存到字典mid_dict中
dict_name = tag_title[0].text
dict_url = url_list[i]
mid_dict[dict_name] = dict_url
except:
pass
return mid_dict
定义保存函数
输出为excel文件
def excel_output(dict, output_name):
a= dict.keys()
b = dict.values()
dict_1 = {
'title': a, 'href': b}
df = pd.DataFrame(dict_1)
# 保存 dataframe
df.to_csv(output_name)
dict
为爬取数据后传入的字典output_name
为保存的csv文件名
主函数
if __name__ == "__main__":
# 莆田二手房
house_dict = get_house_content(".news-list > a")
print(house_dict.keys())
excel_output(house_dict, "house.csv")
# 莆田小鱼网
news_dict = get_news_content()
print(news_dict)
excel_output(news_dict, "news.csv")
文件处理
打开csv文件发现都是乱码,解决方法如下
- 用记事本打开csv文件
- 将文件另存为,保存界面将编码格式更改为ANSI即可
注:仅用于学习交流