概述
您可以前往我的博客获得更好地阅读体验。
本篇文章主要适用于Python爬虫程序员使用Go注释(Golang,在下文中主要使用goalng名词。)编写爬虫,由于目前我个人水平有限,所以此篇文章主要介绍一些简单的爬虫编写,主要包括使用requests
、bs4
等库的初级Python爬虫的改写,暂时不涉及多线程、异步、反爬、登录等复杂情况。
本教程假设您具有编写Python爬虫的能力和基本的编程能力。本教程使用的案例是爬取豆瓣书籍搜索内容。
注释:众所周知,go是一个常见英语单词,所以在一般的搜索中,我们一般使用golang代替go进行搜索。
基础准备
首先,在个人电脑上安装Golang,您可以自行参考官网教程。该过程较为简单,在此不再赘述。
安装完golang后,我们进行项目的初始化,首先创建一个文件夹,在文件夹中打开终端,输入以下命令:
go mod init github.com/wangshouh/python2go
init
后的参数为包名,您可以自行设定,一般使用网站名称+包名的形式,更多关于go mod
的信息可以参考官网教程
接下来,我们创建如下两个文件夹douban
和doubanTest
,前者用来存储主要的爬虫模块,后者用来进行测试程序是否可以正确运行。最终的目录结构如下:
.
├── 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