虽然之前学过了Python,不过感觉那都是一些皮毛的东西,真正用到Python来爬取东西的时候感觉自己的知识还是不够。

目前阶段所学知识:

1:使用re正则和bs4来获取静态的网页数据

举个小小的例子,我们来获取美团的网页数据。

先导入几个库:

import urllib.request
import requests
from bs4 import BeautifulSoup

用几行简单的代码:

page = requests.get('http://nn.meituan.com/meishi/')
soup2 = BeautifulSoup(page.content,'html.parser')
result = soup2.find_all('body')
print(result)

然后运行结果如下:

爬虫学习记录

这样就得到了这个美团美食界面的所有可见的信息。

2:利用selenium来获取动态的网页数据,下面的代码是获取淘宝数据的例子

所有的代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup

driver = webdriver.Firefox()
wait = WebDriverWait(driver,10)

def search(shop=None):
    print("开始搜索")
    driver.get('https://www.taobao.com')
    try:
        input = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR,'#q'))
            )
        input.send_keys(u'{}'.format(shop))
        submits = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search'))
            )
        submits.click()
        get_response()
    except TimeoutException:
        return search(shop)
    
#判断当前的的商品加载出来没
def get_response():
    wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item'))
        )
    html = driver.page_source #获取当前网页的源代码
    soup = BeautifulSoup(html,'lxml')
    items = soup.find('div',class_='m-itemlist').find_all('div',class_='item')
    for item in items:
        product = {
            'image':item.find('div',class_='pic').text,
            'price':item.find('div',class_='price g_price g_price-highlight').text,
            'num':item.find('div',class_='deal-cnt').text[:-3],
            'title':item.find('div',class_='row row-2 title').text,
            'location':item.find('div',class_='location').text,
            }
        print(product)
        #print(item)
#翻页
def next_page(page):
    print(u"当前是第{}页".format(page))
    intput = wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input'))
        )[0]
    submit = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > span.btn J_Submit'))
        )
    input.clear()
    input.send_keys(page)
    submit.click()
    wait.until(
        EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(page))
        )
    get_response()

if __name__ == '__main__':
    shop = input(u'请输入搜索商品的名字:')
    search(shop)
    for i in range(2,100):
        next_page(i)

首先导入必要的库,前两行也是必写的代码。

第一个函数是搜索函数,首先driver.get(),输入框wait.until()等待输入,其次input.send_keys()接受输入,然后用submits点击

第二个函数是得到相应,用driver。page_source得到代码源后用soup解析,将这个

爬虫学习记录

下的源代码标签赋值给item,找到想要的信息并复制它的CSS

最后用主函数输出。

( 由于翻页翻页的代码有些问题就不解释啦。((●'◡'●)) )

运行代码后输入:美食

然后得到如下结果:

爬虫学习记录

这是没有进行数据清洗的数据。

总结:学习python起来还是不简单的,自己也还不够努力,只能靠自己多看看别人的代码和视频,希望接下来的学习能让我我懂得更多。


相关文章: