使用python抓取网页

公司有需要,需要抓取某些网页,自然就想到了简单易用的python。

说是简单易用,但是对于没有接触过python的我还是很吃力的,一边查资料一边写代码,终于写完了,写个博客记录一下

用到的库主要有urllib,etree
使用urllib抓取网页,具体代码为

from urllib import request
def getcontent(url):
    content = ''
    headers = get_headers()
    res = request.Request(url, headers=headers)
    try:
        resp = request.urlopen(res, timeout=30)
        content = resp.read().decode('utf-8')
    except Exception as e:
        print('exception: %s' % e)
        time.sleep(2)
        spider(url)
    return content
    
#获取请求头信息
def get_headers():
    """
    返回请求头信息
    :return:
    """
    headers = {
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/65.0.3325.181 Safari/537.36"
    }
    return headers

注意下面的get_headers(),这个是防止某些网站屏蔽爬虫的

使用etree解析获取到的html
具体方法如下

from lxml import etree
def gettable(content):
    html = bytes(bytearray(content, encoding='utf-8'))
    html = etree.HTML(html)
    tablestr = "<table>"
    try:
        info = html.xpath("//table//tr")
        for text in info:
            tablestr = tablestr + "<tr>"
            tdtext = text.xpath("./td")
            atext = tdtext[0].xpath("./p/a/@href")
            acontent = tdtext[0].xpath("./p/a/text()")
            if(len(atext)>0):
                updatetext = ""
                datetext = tdtext[1].xpath('./p/text()')
                if len(datetext) > 0:
                    updatetext = datetext[0]
                else:
                    datetext = tdtext[1].xpath('.//span/text()')
                    if len(datetext) > 0:
                        updatetext = datetext[0]
                #判断是否有链接,如果没有链接则这里也不加链接
                tablestr = tablestr + "<td><a href=\"file/"+ acontent[0].replace("/","") +".pdf\" target=\"_blank\">" + acontent[0] + "</a></td><td>" + updatetext + "</td>"
            tablestr = tablestr + "</tr>"
        tablestr = tablestr + "</table>"
    except Exception as e:
        print('解析异常: %s' % e)
    return tablestr

由于我需要的信息是里面的表格,而且需要对表格里面的数据进行更改,所以比较复杂,不弱不需要可以适当删除,核心就是使用xpath选择所需要的文本。

我要抓取的信息还需要下载文件,下载文件的代码如下

from urllib import request
def downloadpdf(url,path):
    try:
        #path = r"C:\Users\cam\Desktop\zhj\file"+"\\"+name+".pdf"
        opener = request.build_opener()
        opener.addheaders =  ([("User-Agent","Chrome/65.0.3325.181 Safari/537.36")])
        request.install_opener(opener)
        request.urlretrieve(url, path)
    except Exception as e:
        print('解析异常: %s' % e)
        time.sleep(2)
        downloadpdf(url,path)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容