Python2Go:将Python爬虫使用Go重构

概述

您可以前往我的博客获得更好地阅读体验。

本篇文章主要适用于Python爬虫程序员使用Go注释(Golang,在下文中主要使用goalng名词。)编写爬虫,由于目前我个人水平有限,所以此篇文章主要介绍一些简单的爬虫编写,主要包括使用requestsbs4等库的初级Python爬虫的改写,暂时不涉及多线程、异步、反爬、登录等复杂情况。

本教程假设您具有编写Python爬虫的能力和基本的编程能力。本教程使用的案例是爬取豆瓣书籍搜索内容。

注释:众所周知,go是一个常见英语单词,所以在一般的搜索中,我们一般使用golang代替go进行搜索。

基础准备

首先,在个人电脑上安装Golang,您可以自行参考官网教程。该过程较为简单,在此不再赘述。

安装完golang后,我们进行项目的初始化,首先创建一个文件夹,在文件夹中打开终端,输入以下命令:

go mod init github.com/wangshouh/python2go

init后的参数为包名,您可以自行设定,一般使用网站名称+包名的形式,更多关于go mod的信息可以参考官网教程

terminalOutput接下来,我们创建如下两个文件夹doubandoubanTest,前者用来存储主要的爬虫模块,后者用来进行测试程序是否可以正确运行。最终的目录结构如下:

.
├── douban
├── doubanTest
└── go.mod

本教程没有使用单元测试等复杂内容,设计doubanTest只是为了提供main函数入口

页面获取

抓取页面并打印

豆瓣书籍搜索页面的URL的形式为https://www.douban.com/search?cat=1001&q={搜索内容},需要注意的是搜索内容需要使用url进行编码。需要注意的是豆瓣具有简单的反爬机制,要求请求必须含有User-Agent

使用Python程序编写如下:

import requests

def get_html(search_text):
    url = "https://www.douban.com/search"
    params = {
   
        "q": search_text,
        "cat": "1001"
    }
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    }
    response = requests.get(url, headers=headers, params=params)

    print(response.text)

显然,golang中没有requests这种库,但标准库net/url可以实现url编码,标准库net/http可以实现各类http请求。

首先,我们在douban文件夹内创建getSearchResult.go文件,输入以下内容。

以下给出golang的代码:

package douban

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)

func GetSearchHtml(term string) {
   
	q := url.QueryEscape(term)
	searhUrl := "https://www.douban.com/search?cat=1001&q=" + q

	client := &http.Client{
   }

	req, err := http.NewRequest("GET", searhUrl, nil)

	if err != nil {
   
		log.Fatalln(err)
	}

	req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0")

	resp, err := client.Do(req)

	if err != nil {
   
		log.Fatalln(err)
	}

	returnHTML, err := ioutil.ReadAll(resp.Body)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WongSSH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值