上一篇讲了:爬虫页面带来的道德风险和法律责任。在Python中,我们使用requests库访问目标网站,使用BeautifulSoup解析获取到的内容。由于这两个库不是Python标准库,需要单独安装:pipinstallbeautifulsoup4pipinstallrequests以下是获取网站内容的示例代码:fromurllib.errorimportHTTPError,URLErrorimportrequestsfrombs4importBeautifulSoupfromconfigimportlogger_configclassProcessConnection:def__init__(self):logger_name='web_scraping'self._logger_write_file=logger_config.LoggingConfig().init_logging(logger_name)definit_connection(self,uri):#连接到网站try:session=requests.session()headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/85.0.4183.121Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}html=session.get(uri,headers=headers)除了(HTTPError,URLError)ase:self._logger_write_file.error('执行get_sms_data函数出错,具体报错内容:{message}'.format(message=e))returnFalsetry:bsObj=BeautifulSoup(html.text,features='html.parser')returnbsObjexceptAttributeErrorase:self._logger_write_file.error('执行get_sms_data函数出错,具体错误内容:{message}'.format(message=e))returnFalse首先,requests会话对象用于发送请求,User-agent设置,这里User-agent可以自动设置这样方便伪造User-agent,同时也告诉服务器客户端接受哪些内容类型:session=requests.session()headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/85.0.4183.121Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}如果网络连接出错,将对error:except(HTTPError,URLError)ase:BeautifulSoup解析HTML文档出错,抛出AttributeError:exceptAttributeErrorase:进行异常处理以上完成了一个使用Python连接网站的过程这时候如果没有异常,我们就会得到网站的HTML代码,然后根据需要进一步分析HTML的内容,得到我们需要的内容。解析HTML如果您已经确定了目标内容,可能是收集一个名称、一组统计信息或一段文本。您的目标内容可能隐藏在HTML“泥堆”的第20层标签中,其中包含许多无用的标签或HTML属性。根据目标网站的代码级别,可以写如下一行代码提取内容:bsObj.findAll("table")[4].findAll("tr")[2].find("td").findAll("section")[1].find("a")上面的写法虽然可以达到目的,但是这种写法看起来不太好。除了代码不美观之外,还有一个问题:当站长对网站稍作修改时,这行代码就会失效。比如我们需要获取自己的公网IP地址,可以通过查询这个网站获取:https://www.pdflibr.com,然后查看网页源代码找到自己的IP地址,源码如下:
