爬虫学习-莆田

爬虫学习-莆田

使用库

  • 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文件发现都是乱码,解决方法如下

  1. 用记事本打开csv文件
  2. 将文件另存为,保存界面将编码格式更改为ANSI即可

注:仅用于学习交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值